Skip to main content

Full text of "Aprenda a programar en BASIC MSX"

See other formats


HtT jlfT CON PROGRAMAS 



SONY 

HF 



APRENDA A PROGRAMAR 
EN BASIC MSX 

KANIAHAR 

SiFT 




3 a Edición 

©1987 SONY ESPAÑA, S.A. 
Sabino de Arana 42-44 
08028-Barcelona 

Reservados todos tos derechos. Ninguna parte de este libro puede ser reproducida 
por ningún medio, sin el permiso previo de SONY ESPAÑA, S.A. 



Dpto. Legal 8; 3940-87 
ISBN 84-398-4421-2 
Imprime: Gráficas Signo, S.A. 

Carretera de Cornelia, 140, 2 o — Espíugues de Lio brega: 
Printed in Spain. Impreso en España. 

MSX es marca registrada de ASCII CORP. 

COD. 21000195 



PROLOGO 



Hasta la aparición del MSX, los ordenadores existentes en el mer- 
cado se caracterizaban por su incompatibilidad. Los programas y 
los distintos periféricos conectadles a la unidad central eran sola- 
mente válidos para aquella marca que estaban previstos. 

Esta incompatibilidad era, y es, un grave inconveniente para el 
usuario final, que queda indefenso ante los vaivenes que pueda 
sufrir cada una de estas empresas 

El MSX ha revolucionado el mercado en este aspecto. Son ya más 
de veinte compañías que han adoptado este standard, dispuestas a 
terminar con la anarquía de lenguajes y de conexión de periféricos 
existentes. 

Se pretende asi ofrecer una árnplia gama de programas, ordenado- 
res y periféricos para que el usuario pueda escoger aquello que 
mejor se adapte a sus necesidades de entre todos los modelos 
existentes, contando con la sguridad de que podrá adquirir progra- 
mas y periféricos de cuafquiera de las compañías MSX. 

Pero esta es solamente una de las ventajas del MSX. 

La segunda, tan importante o más que la primera, es su propia 
potencia. A lo largo de las páginas de este libro se comentan todos 
los comandos del MSX-BASIC para que lo pueda comprobar 

Se ofrecen, además, una serie de informaciones técnicas de gran 
utilidad para todos aquellos que pretendan aprender programación 
y también para quienes ya desean profundizar en el MSX. 

Se listan, asimismo, una serie de programas con el fin de demostrar 
la sencillez y, al propio tiempo, la potencia del MSX-BASIC 

Podemos concluir diciendo que las tres características que confi- 
guran el MSX son su estandarización de software y hardware, su 
sencillez y su potencia. 

Por ello puede decirse que el MSX está revolucionando la informá- 
tica familiar y abre un nuevo campo en la informática aplicada a la 
educación y a la gestión, permitiendo disponer de un equipo com- 
pleto y potente a un precio muy asequible. 



INDICE: 

PRIMERA PARTE 

INFORMACION GENERAL DEL BASIC MSX 

1.0. INTRODUCCION , 13 

1.1. MODOS DE FUNCIONAMIENTO 13 

1.2. FORMATO DE LAS LINEAS 13 

1.2.1. Número de línea 14 

1.3. CONJUNTO DE CARACTERES ... 14 

1.4. CONSTANTES 15 

1 .4.1 . Constantes numéricas de simple y doble precisión ... 16 

1.5. VARIABLES , 17 

1.5.1 Nombres de variables y Declaración de caracteres f , 17 

1.5.2. Variables mat rici al es (Va ria bles s u bi nd ¡cadas) „ 18 

1.5.3. Requisitos de espacio „ 19 

1.6. CONVERSION DE TIPOS . . 19 

1.7. EXPRESIONES Y OPERADORES 21 

1.7.1. Operadores aritméticos , , 21 

1 .7.1 .1 . División entera y Resto , 21 

1 .7.1 .2. Overflow y División por cero 22 

1.7.2. Operadores relaciónales 22 

1.7.3. Operadores lógicos 23 

1.7.4. Operadores funcionales 25 

1.7.5. Operaciones con cadenas (strings) 25 

1.8. PROGRAMA EDITOR . . 26 

1.9. TECLAS DE FUNCION .. 30 



SEGUNDA PARTE 



COMANDOS, SENTENCIAS 
Y FUNCIONES DEL BASIC MSX 



1. Ayuda al programador 33 

• AUTO 33 

• DELETE 34 

• LIST 35 

• LLIST 35 

• NEW 35 

• RENUM 36 

• KEY LIST 37 

2. Programación 39 

•RUN 39 

• STOP 40 

• CONT 40 

■ END 40 

• TRON ..... 40 

• TROFF 40 

• FOR/NEXT 41 

• GOTO 42 

• IR., THEN... ELSE 43 

• IF.;. GOTO... ELSE 43 

• GOSUB 44 

• RETURN 44 

• ON... GOTO 44 

• ON... GOSUB 45 

3. Definición 

e inicialización 47 

• CLEAR „ 47 

• DIM 48 

• ERASE 48 

• DEFINT 49 

• DEFSNG 49 

• DEFDBL 49 

• DEFSTR 50 

• DEFFN 50 

• DEFUSR 51 

• USR 51 



• KEY 52 

• TIME 52 

4. Entrada/Salida 53 

• READ „ 54 

• DATA 54 

• RESTORE 55 

• INPUT 56 

• UNE INPUT ....... 58 

• LET 58 

• MID$ = Y$ 59 

• PRINT 59 

» PRINT USING 60 

• LPRINT 64 

■ LPRINT USING ..... 64 

• LPOS 64 

• SWAP 64 

• INKEYS 65 

• INPUT$ 65 

• FRE 65 

• POKE 66 

• PEEK 66 

• VPOKE 66 

• VPEEK 66 

• INP 67 

•OUT , 67 

• WAIT 67 

•STICK 68 

• STRIG 68 

5. interrupciones 69 

• ON KEY GOSUB 69 

• KEY ON/OFF/STOP 70 

• ON STRIG GOSUB 72 

• STRIG ON/OFF/STOP .... 72 
•ON STOP GOSUB 72 

• STOP ON/OFF/STOP 73 



• ON SPRITE GOSUB 73 

• SPRITE ON/OFF/STOP .. 73 

• ON INTERVAL= < > 
GOSUB i 73 

• INTERVAL 
ON/OFF/STOP , 73 

6. Funciones numéricas 75 

• ABS 75 

• INT 76 

• FIX 76 

• SGN 76 

• CDBL 76 

• CSNG 77 

• CINT , 77 

• EXP 77 

• LOG 77 

• SQR 78 

• SIN 78 

• COS .... 78 

• TAN 79 

• ATN , 79 

■ RND „ , 79 

7. Conversión de 

códigos 81 

• ASC 81 

• CHR$ 81 

• BIN$ 82 

• OCT$ 82 

• HEX$ 82 

• VAL . 83 

• STR$ 83 

8. Cadenas de 

caracteres 85 

• RIGHT$ 85 

• LEFT$ 86 

• MID$ 86 

• STRING$(N,X) 86 

• STRINGS (N,X$) 86 

• SPACE$ . 87 

• INSTR 87 

• LEN 87 



9. Proceso de Errores 89 

• ON ERROR GOTO „ 89 

■ ERUERR 90 

• RESUME , 90 

• ERROR 90 

10. Pantalla y Gráficos 93 

• SCREEN 93 

• WIDTH 94 

• CLS 95 

• COLOR 95 

• LOCATE 95 

• TAB 96 

• SPC 96 

• POS 96 

• CSRLIN 97 

• KEY ON/OFF 97 

• PSET 97 

• PRESET 97 

• LINE 98 

• CIRCLE 98 

• PAINT 99 

• DRAW 100 

• SPRITE$ 100 

• PUT SPRITE 100 

• POINT 100 

• BASE 100 

11. Sonido 101 

• BEEP 101 

• SOUND 101 

« PLAY ..... 103 

• PLAY (N) 103 

12. Almacenamiento en cassette 

105 

• CSAVE 105 

• CLOAD 106 

• CLOAD? ... 106 

• SAVE , 107 

• LOAD 107 

• BSAVE 107 

• BLOAD , ... 108 

• MERGE „„. ... 108 

• MOTOR ON/OFF 108 



Ficheros 


. 111 


ANEXOS: 




• OPEN # 


111 






* MAXFILES 


112 






• PRfNT U 


112 


1 . GRAFICOS 


119 


• PRINT # USING 


112 


2. SONIDO . 


135 


• INPUT$(n,#) ... 


113 


3. INFORMACION 




• LINE INPUT # 


114 


TECNICA . 


139 


• EOF 


114 


4. PROGRAMAS 


161 


• GLOSE # 


114 


5. CODIGOS DE ERROR 


..... 181 



1. GRAFICOS . , 119 

Introducción . 119 

Macro lenguaje para gráficos , 119 

Gráficos SPRITE . . 125 

2. SONIDO , ... „ 135 

Introducción 135 

Macro lenguaje musical 135 

3. INFORMACION TECNICA M , ... 139 

Mapa de memoria , 141 

Procesador de video , 153 

Conectores > 160 

Cassette , , 160 

Audio/Video , , 161 

Joystíck 161 

Impresora , , 161 

Cartucho 162 

RGB !63 

4. PROGRAMAS . . , 165 

Demostración de los comandos gráficos 165 

Programa de gráficos , 166 

Simulación rebotes de una pelota 166 

Cuadros abstractos ., , 166 

Círculos de cobres 167 

Flores 167 

Dibujo de círculos de colores aleatorios en forma senoidal 168 

'Estrellas* , , 168 

Programa demostración de gráficos 1 169 

Programa demostración de gráficos 2 , 170 



Programa de gráficos: 
«SPRITES» 

Movimiento del cañón -* Cursores 

Disparos Barra de espacio 171 

Programa de música »■ 1? 3 

Organo musical ...~«. ■- 173 

Himno ~ ~. 175 

Rock 176 

Programa para hacer una copia de la pantalla 

(SCREEN 0) por impresora 177 

Programa para hacer una copia de la pantalla 

(SCREEN 1) por impresora , , 177 

Programa para hacer una copia de la pantalla 

(SCREEN 2/3) con el Plotter PRN-C41 de SONY „ 177 

Programa para utilizar con el Plotter PRN-C41 de SONY: 

—Círculo 178 

—Cuadrícula ^ «... 179 

Juego: Laberinto ■ 179 

Programa para dibujar con los cursores ... 182 

5. MENSAJES Y CODIGOS DE ERROR 185 



PRIMERA PARTE 



INFORMACION GENERAL 
DEL BASIC MSX 



1.0. INTRODUCCION 



El BASIC MSX es una versión ampliada del Microsoft Standard Basic 
versión 4.5, e incluye soportes para gráficos, música y diversos peri- 
féricos 

Fue diseñado para seguir el GW-BASIC, estandard en el mundo de los 
microprocesadores de 16 bits. Pero el mayor esfuerzo fue hacer todo 
el sistema lo más flexible y ampliable posible. 

El BASIC MSX trabaja con 14 dígitos para ofrecer doble precisión en 
las funciones matemáticas, por lo que no se generarán más esos 
extraños errores de redondeo que confunden a los usuarios. 



1.1. MODOS DE FUNCIONAMIENTO 

Una vez inicializado el BASIC MSX, aparece rápidamente el OK. 
«OK», indica que el sistema está dispuesto para aceptar cualquier 
comando. Es ahora cuando el BASIC MSX puede ser usado en modo 
directo o indirecto. 

En el modo directo los comandos no están precedidos por número de 
línea y se ejecutan al ser introducidos. Los resultados de operaciones 
aritméticas y lógicas aparecen inmediatamente en la pantalla y son 
almacenados para su uso posterior, pero las instrucciones desapare- 
cen tras su ejecución (no quedan almacenadas en memoria). 

El modo directo es útil para utilizar el BASIC MSX como calculadora, 
para rápidas operaciones que no requieren un programa completo, 

El modo indirecto se utiliza para introducir programas. Las líneas del 
programa están precedidas por números y son almacenadas en me- 
moria. El programa almacenado en memoria será ejecutado al intro- 
ducir el comando RUN. 



1.2. FORMATO DE LAS LINEAS 

En una linea de programa, pueden situarse varias instrucciones, 
siempre que estén separadas por dos puntos: 



10 instrucción BASIC: instrucción BASIC 



Toda línea de programa comienza siempre con un número de línea y 
termina al pulsar RETURN, pudiendo contener un máximo de 255 
caracteres. 

1.2.1. Número de linea 

Cada línea de un programa BASIC MSX, comienza con un 
número. 

Los números de línea indican el orden en que han sido almace- 
nadas en memoria las ííneas del programa. 

También son utilizados como referencia en la edición del pro- 
grama y en las sentencias de bifurcación. 

Los números de línea deben estar comprendidos entre 0 y 
65.529. 

1.3. CONJUNTO DE CARACTERES 

El conjunto de caracteres del BASIC MSX está formado por: caracte- 
res alfabéticos, caracteres numéricos, caracteres especiales y carac- 
teres gráficos. 

Los caracteres alfabéticos son las letras del alfabeto. 

Los caracteres numéricos son Jos dígitos del 0 al 9. 

Los siguientes caracteres especiales están reconocidos por el BASIC 
MSX: 



Carácter 


Acción 




signo de equivalencia 


+ 


suma 




resta 




multiplicación 



Carácter 


Acción 




/ 


división 






símbolo exponencial o acento 
circunflejo 


( 


paréntesis izquierdo 






paréntesis derecho 


% 


porcentaje 


$ 


signo de dólar 






exclamación 






corchete izquierdo 






corchete derecho 






punto o punto decimal 






apostrofe 






punto y coma 






dos puntos 


& 


and 


? 


signo de interrogación 


< 


menor que 


> 


mayor que 


Y 


signo del yen 



1.4 CONSTANTES 

Las constantes son los valores que el BASIC MSX usa durante la 
ejecución de un programa. Hay dos tipos de constantes: numéricas y 
alfanuméricas (string). 

Una constante alfanumérica es una sucesión de hasta 255 caracteres 
alfanuméricos insertados entre comillas. 



"HOLA 11 '25.000.000 $" "Número de empleados 11 . 



Las constantes numéricas son números positivos o negativos, y no 
pueden contener comas (El punto realiza la función de la coma). Hay 
seis tipos de constantes numéricas: 

1 . Constantes enteras: todo número entre -32768 y 32767. Las cons- 
tantes enteras no contienen decimaíes 

2. Constantes con punto decimal fijo: números reales positivos o 
negativos que contengan decimales. 



3. Constantes con punto decimal, número positivos o negativos en 
forma exponencial. El margen para estas constantes está entre 
10 64 y 10 +63 . 



235,988 E-7 = 0.0000235988 
2359 E6 = 2359000000 



4. Constantes hexadeeimales: números hexadeeimales, con el pre- 
fijo & H 



&H76 
&H32F 



5, Constantes octales: números ocíales, con el prefijo & 0 ó & 



&0 347 
&347 



6. Constantes binarías: números binarios, con el prefijo & B 



&B0111Q110 
&B 11100111 



1 .4.1. Constantes numéricas de simple y doble precisión 



Las constantes numéricas de simple precisión están almace- 
nadas con 6 dígitos y son impresas con hasta 6 dígitos de 
precisión. Las constantes numéricas de doble precisión están 
almacenadas con 14 dígitos y son impresas con hasta 14 dígi- 
tos de precisión. 



Una constante de simple precisión es toda constante numérica 
que cumple una de las siguientes características: 

1. Forma exponencial usando E 

2. Signo de admiración (!) 



-1.09 E-06 
22.5! 



Una constante de doble precisión es toda constante numérica 
que cumple una de las siguientes características: 

1. Todo número no exponencial (usando E) sin signos de 
admiración. 

2. Número exponencial usando la letra D 

3. Número con el signo # 



3489 

345962811 
-1.Ü9432 D-06 
3489.0 # 



1.5. VARIABLES 

Las variables son nombres usados para representar valores. El valor 
de una variable puede ser asignado explícitamente por el programa- 
dor o puede ser el resultado de unos cálculos en el programa. Al 
inicializar el sistema, todas las variables tendrán asignado el valor 
cero (variables numéricas) ó «nuil» (variables alfanuméricas). 

1.5.1. Nombres de variables y Decía ración de ca ráete res 

Los nombres de variables en el BASIC MSX pueden ser de 
cualquier longitud, pero solo son significativos 2 caracteres. 
Estas variables pueden contener letras y números pero el pri- 
mer carácter debe ser siempre una letra. 



Una variable no puede ser una palabra reservada y no puede 
contener palabras reservadas. Las palabras reservadas inclu- 
yen todos ios comandos del BASIC MSX, nombres de funcio- 
nes, ordenes y nombres operativos. Por ejemplo, si una varia- 
ble comienza por FN, se supondrá que es la llamada de una 
función definida por el usuario y no el nombre de una variable. 

Las variables pueden representar un valor numérico o una 
cadena de caracteres. Las variables alfanuméricas se repre- 
sentan con el símbolo $ como último carácter: 



A$ - ' VENTAS fr 



Las variables numéricas pueden ser números enteros, de sim- 
ple o doble precisión. Los símbolos que identifican esas varia- 
bles son; 

% variable entera 

! variable de simple precisión. 

# variable de doble precisión. 



Pi # 


doble precisión 


Mínimum! 


simple precisión 


Limít % 


variable entera 


m 


variable alfanumérica 


ABC 


doble precisión 



Existe un segundo método por el cual pueden definirse los 
tipos de variables utilizando las sentencias DEFINT, DEFSTR, 
DEFSGN y OEFDBL en el transcurso de un programa. 

1.5.2. Variables matríciales (variables subí nd i cadas). 

El BASIC MSX, permite trabajar con variables matríciales para 
designar elementos de una matriz. 

Las matrices deben declararse por medio de una sentencia de 



dimensionado (DIM) en el programa, pero ello no es impres- 
cindible si los subíndices rio superan et rango de 0 a 10. 

El nombre de una variable con subíndice es siempre variable y 
va seguido por una o más expresiones entre paréntesis. La 
expresión entre paréntesis indica la posición de los datos en la 
Matriz. 



A $ (4): variable subindicada de una dimensión. 

A (2,3); variable subindicada de dos dimensiones. 

A (2,3, t 6): variable subindicada de varias dimensiones. 



Una matriz puede tener hasta 255 dimensiones. El número 
máximo de elementos está determinado por la capacidad de 
memoria. 

1 .5.3. Requisitos de espacio 

La siguiente tabla, indica el número de bytes ocupados por los 
valores representados en los distintos tipos de variables: 



Variables numéricas: 



Tipo Bytes 

entera 2 

simple precisión 4 

doble precisión 8 



Matrices: 



entera 

simple precisión 
doble precisión 



2 por elemento 
4 por elemento 
8 por elemento 



Variables alfanuméricas: 3 bytes más el contenido de la cadena 



1.6. CONVERSION DE TIPOS 



Cuando es necesario el BASIC MSX convierte una constante numé- 
rica de un tipo en otra. He aquí unos ejemplos: 

1. Si una constante numérica de un tipo se iguala a una variable 
numérica distinta, el número será almacenado como se indica en 
la variable. 



10 A % = 23,42 

20PRINTA% 

RUN 

23 



Si una variable string se iguala un valor numérico o viceversa, apare- 
cerá el siguiente mensaje de error: Type misrnatch". 



2. Durante el cálculo de una operación todos los operandos son 
convertidos a un único grado de precisión y lo mismo sucede con 
el resultado. 



10D = 6/7! 


La operación y resultado 


20 PRINTD 


son en doble precisión. 


RUN 




, 85714285714286 





10 D! = 6/7 


La operación se ha hecho 


20 PRINTD! 


en doble precisión pero el 


RUN 


resultado aparece en D!, con 


. 857143 


simple precisión y 




redondeado. 



3. Los operandos pueden ser convertidos en enteros y obtener un 
resultado en números enteros, Los operandos deben estar 
comprendidos entre —32768 y 32767 para que no exista un error 
de «overflow». 



4. Cuando un valor con punto decimal flotante se convierte en un 
entero, la parte decimal desaparece. 



10 C% sa 55.88 
20 PRJNT C % 
RUN 

55 



5. Si una variable de doble precisión se asigna a un valor de simple 
precisión solo serán válidos los primeros 6 dígitos. 



10 Aí = SOR (2) 
20 B = A! 
30 PRINT A!, B 
RUN 

141421 1.41421 



1 .7. EXPRESIONES Y OPERADORES 



Una expresión puede ser una cadena o una constante numérica, una 
variable, una combinación de constantes y variables con operandos 
que producen un valor. 

Los operadores del BASIC MSX pueden ser divididos en 4 clases: 
aritméticos, relaciónales, lógicos y funcionales. 

1.7.1. Operadores aritméticos 



Operador 


Operación 


Expresión 




Exponencial 


X * Y 




Negación 


— X 


V 


Multiplicación, División 


X*YX/Y 




Adición, sustracción 


X+Y X— Y 



Para cambiar el orden de realización de las operaciones, se 
usa el paréntesis. 

Las operaciones en el interior del paréntesis se realizan en 
primer lugar. Dentro del paréntesis, se mantiene el orden usual 
de las operaciones: multiplicación y división en primer lugar y 
tras estas, suma y resta. 



1.7.1.1. División entera y Resto 



Dos operandos adicionales están disponibles en el 
BASIC MSX 



La división entera se indica con el símbolo de Yen. Los 
operandos se convierten a enteros (entre — 32768 y 
32767) antes de efectuar la división y el cociente es 
redondeado a entero. 



10/4 = 2 
25.68/6.99 = 4 



MOD, da el valor entero del resto de la división. 



10MOD 4 - 2(10/4 = 2 con el resto 2) 
25.63 MOD 6,99 - 4 (25/6 = 4 con el resto 1). 



1.7.1.2. Overflow y división por cero 

Si durante el cálculo de una operación, se encuentra 
la división por cero aparece el mensaje de error «Divi- 
sión by zero» y termina la ejecución del programa. 

Asimismo, cuando se produce una sobrecarga de da- 
tos aparece el mensaje de error «Overflow». 

1.7.2. Operadores relaciónales 

Son usados para comparar dos valores. El resultado de la 
comparación es verdadero (—1) o falso (0) 



Operador 



Operación 



Expresión 



< = 



> = 



< > 



> 



< 



Igualdad 
Desigualdad 
Menor que 
Mayor que 
Menor o igual que 
Mayor o igual que 



X> = Y 



X>Y 



X> = Y 



X<Y 



XoY 



X = Y 



El signo igual se usa también para asignar un valor a una 
variable. 

Cuando se combinan operadores aritméticos y relaciónales en 
una expresión, el aritmético se ejecutará siempre en primer 
lugar, 



X + Y< (T-1)/2 



En primer lugar se realizarán las operaciones: X + Y y (T-1)/2, 
luego se compararán los resultados obtenidos. 



1.7.3. Operadores lógicos 

Realizan operaciones lógicas, bit a bit. El resultado puede ser 
cierto (1) o falso (0). En una expresión, las operaciones lógicas 
son ejecutadas tras i as aritméticas y Jas relaciónales. La fun- 
ción que realizan los operadores lógicos NOT, AND, OR, XOR, 
EQU e IMP se resume en la siguiente tabla: 

Operadores lógicos del BASIC MSX. 





NOT 


X 


NOTX 








1 


0 








0 


1 
















AND 


X 


Y 


XANDY 


<^ 




1 


1 


1 






1 


0 


0 






0 


1 


0 






0 


0 


0 




OR 










X 


Y 


XOR Y 






1 


1 


1 






1 


0 


1 






0 


1 


1 






0 


0 


0 




XOR 


X 


Y 


XXORY 






1 


1 


0 






1 


0 


1 






0 


1 


1 






0 


0 


0 



EQU 



A 


V 


A tUV Y 


1 


1 


1 


1 


0 


0 


0 


1 


0 


0 


0 


1 


X 


Y 


XIMPY 


1 


1 


1 


1 


0 


0 


0 


1 


1 


0 


0 


1 



Así como los operadores relaciónales pueden ser usados para 
tomar decisiones base al programa efectuado, los operadores 
lógicos pueden conectar dos o más relaciónales y dar un valor 
vedadero o falso para ser usado en una decisión. 



IF D < 200 AND F < 40 THEN 80 
IF I > 10 OR K >0 THEN 50 
IF NOTP THEN 100 



63 AND 16 = 16 63 = binario 111111 

16 = binario 10000 
así, 63 AND 16 = 16 (binario, 10000) 

15 AND 14 =14 15 = binario 1111 
14 = binario 1110 
asi, 15 AND 14 = 14 (binario 1110} 

—1 AND 8 - B —1 - binario 1111111111111111 

8 * binario 1000 
así, — 1 AND 8 - 8 (binario 1000) 



4 OR 2 = 6 



4 = binario 100 

2 = binario 10 

así, 4 OR 2 = 6 (binario 110) 



10OR10- 10 10 = binario 1010 

así 1010 OR 1010= 1010 

— 1 OR-2 = 1 — 1 -* binario 1111111111111111 

—2 = binario 111111111111111 

así — 10R —2 = —1 (binario 1111111111111111) 
NOTX = — (x + 1) 



1.7.4. Operadores funcionales 

El BASIC MSX, tiene funciones intrínsecas residente en el 
sistema, como SQR (raíz cuadrada) ó SIN (seno). También 
pueden definirse funciones escritas poreí programador con el 
comando. DEF FN. 



1.7.5. Operaciones con cadenas (strings) 

Los strings pueden ser encadenados usando el signo + 



10 A$ = "FILE": B$ = ' ÑAME 11 

20PRINT A$ + B$ 

30 PRINT "NEW" + A$ + B$ 

RUN 

FILE ÑAME 
NEW FILENAME 



Los strings pueden ser comparados usando los mismos signos 
de comparación que los usados con números 



= < 



> = 



Las comparaciones entre strings, se efectúan carácter a ca- 
rácter utilizando el código ASCII. Sí todos los códigos ASCII 



son iguales, los string son iguales. Si durante la comparación 
de strings se llega al final de uno de ellos, el string más corto 
será el más pequeño. Los espacios en blanco son significati- 
vos. 



<J A"< 'AB" 

"FILENAME" = "FILENAME" 

"X& M >'*X«" 

' GL ">"CL" 

'kg 1 ' <"KG" 

"SMYTH" < "SMYTHE" 

BS < "9/12/83" donde B$ - '8/12/83" 



Las comparaciones de strings pueden ser usadas para com- 
probar el valor de unsthng ó para alfabetizar strings. Todas las 
constantes utilizadas en las expresiones de comparación de- 
ben írentre comillas. 



1.8. PROGRAMA EDITOR 

El programa editor, permite al usuario realizar todos tos cambios 
necesarios dentro del programa (borrar o añadir líneas de programa, 
insertar instrucciones,..,.) utilizando para ello los cursores y las teclas 
INSERT (insertar) y DELETE (borrado). El usuario puede situarse 
rápidamente en cualquier punto de la pantalla y hacer las correccio- 
nes necesarias. 

Programas 

El Editor de pantalla está en funcionamiento continuamente desde la 
aparición de «OK» hasta que se ejecuta un programa mediante RUN. 
El Editor procesa todas las líneas de texto introducidas, conside- 
rando una línea de programa toda aquella que comienze por un 
número. 

Si se intenta borrar una linea inexistente aparecerá el mensaje de 
error: «Undefined line number». 




E! Editor procesará Jos comandos del programa en los siguientes 
casos: 



1. Adición de una nueva línea al programa: El número de líneas 
debe estar comprendido entre 0 y 65529 y debe ir seguido de un 
carácter como mínimo. 

2. Modificación de una línea ya existente: la línea existente queda 
reemplazada por el nuevo texto introducido. 

3. Borrado de una línea: Se produce si la nueva línea contiene sólo 
el número de línea que se desea borrar. 

4. Se produce un error. 



Sí se pretende introducir una nueva línea de programa y no hay 
suficiente espacio en memoria, se imprimirá el mensaje de eror «Out 
of memory». 



Una linea de programa puede contener varias instrucciones, siempre 
que estén separadas por dos puntos <:). El número máximo de carac- 
teres por línea de programa es 250. 



Edición de Programas 

Mediante el comando LIST nos aparecerán todas las instrucciones 
del programa, pudiendo así ser editadas. El texto puede ser modifi- 
cado moviendo el cursor hasta el lugar donde se precisa hacer el 
cambio. Esta modificación puede realizarse efectuando una de las 
siguientes acciones: 



1. Escribiendo directamente sobre el carácter equivocado. 

2. Borrando los caracteres a la derecha del cursor. 

3. Borrando los caracteres a la izquierda del cursor. 

4. Insertando caracteres. 

5. Añadiendo caracteres al final de la linea 



Los cambios en una línea quedan grabados cuando se pulsa la techa 
RETURN. 



Funciones del editor de pantalla 



La siguiente tabla muestra los códigos hexadeci males del BASIC MSX 



Tabla 1 . Funciones del control del BASIC MSX. Pulsando a un tiempo 
Ja techa CTRL y otra determinada, se ejecuta una operación especial. 



Código 






frexadecimal 


CTRL + 


Gne ración realizada 


01 


A 


— 


02 


B 


Mueve el cursor al principio de la palabra precedente, 


03 


C 


Abandona la espera de un input y la numeración 
automática de líneas. 


04 


D 




05 


£ 


Borra texto entre el curso r y el f i nal de 1 a 1 i nea. 


06 


F 


Mueve el cursor al principio de la palabra siguiente. 


07 


G 


Sonido Bip. 


08 


H 


Misma función que tecla BS. 


09 


I 


Misma función que tecla TAB. 


0A 


J 


Mueve el cu rsor a la línea posterior. 


OB 


K 


Misma función que tecla HOME. 


oc 


L 


Limpia pantalla. 


OD 


M 


Misma función que tecla RETURN. 


QE 


N 


Mueve el cursor a la posición posterior a la del último 
carácter de la linea. 


OF 


O 


— 1 


10 


P 


— 


1 1 


Q 


— 




R 


Misma función que tecla INS 


1 J 


S 


— 


1 H 


T 




1 D 


U 


Borra ios caracteres de la línea hasta la posición del cursor. 


16 


V 




17 


W 




18 


X 


Misma función que tecla SELECT 


19 


Y 




1A 


z 




1B 


[ 


Misma función que tecla ESC. 


1C 


/ 


Mueve el cursor a la derecha. 


ID 


] 


Mueve el cursor a la izquierda. 


1E 




Mueve el cursor arriba. 


1F 




Mueve el cursor abajo. 



Funciones de teclas especiales 

Tecla TAB; Mueve el cursor 8 posiciones a la derecha. Todos los 
caracteres existentes en esas posiciones son borrados. 



Tecla RETURN: Debe pulsarse siempre que se haya terminado de 
entrar una línea. 



Tecla ESC: La función de esta tecla viene determinada por el sof- 
tware utilizado. Para el BASIC MSX, no tiene utilidad 
concreta. 

Tecla STOP: Al presionar la tecla se interrumpe la ejecución de un 
programa o de un listado. Al presionarla de nuevo, se 
reanuda la ejecución. Pulsando al mismo tiempo 
CTRL, y STOP se termina la ejecución del programa 
con el siguiente mensaje Break in (n° instrucción). 

Tecla SELECT: La función de esta tecla viene determinada por el 
software utilizado. Para el BASIC MSX, no tiene 
utilidad concreta. 

Tecla INSERT: Al pulsarla, se reduce el tamaño del cursor y pueden 
introducirse los caracteres deseados en la posición 
del cursor, mientras los caracteres a la derecha del 
mismo van desplazándose a medida que se introdu- 
cen los nuevos. Pulsando la tecla INSERT de nuevo, 
el cursor vuelve a su posición normal y termina la 
función de inserción. Pulsando tas teclas de movi- 
miento del cursor o pulsando RETURN, también ter- 
mina la función de inserción. 

Tecla HOME: Mueve el cursor al extremo superior izquierdo de la 
pantalla. 

Tecla DEL: Borra el carácter situado en la posición del cursor. Los 
caracteres siguientes se desplazan una posición a la 
izquierda. 

Tecla BS: Al pulsarla, el cursor se desplaza a su izquierda, borrando 
el carácter que esté en esa posición. 

Tecla SHIFT: Pulsándola al mismo tiempo que cualquier tecla, apa- 
rece en pantalla e\ símbolo superior izquierdo de la 
tecla en cuestión. 



Tecla CAP: Las letras que aparecen en pantalla son mayúsculas, 
pero los números y símbolos no varían. 

Tecla CODE: Pulsando CODE y cualquier tecla, aparece el símbolo 
inferior izquierdo de la tecla. Si pulsamos, además, 
SHIFT, aparece el símbolo superior izquierdo. 



Tecla GRAPH: Pulsándola ai mismo tiempo que cualquier tecla, apa- 
rece el símbolo inferior derecho de la tecla. Si pulsa- 
mos además, SHIFT h aparece el símbolo superior de- 
recho. 

1.9. TECLAS DE FUNCION 

El BASIC MSX, dispone de 10 funciones predefinidas en las 
teclas de función F1/F10. El contenido de estas teclas se visua- 
liza en el margen inferior de la pantalla podiendo ser reprog ra- 
madas mediante el comando KEY. 



Las funciones predefinidas son: 



F1 


color 


F2 


auto 


F3 


goto 


F4 


list 


F5 


run 


Al pulsar la tecla SHIFT, tendremos: 


F6 


color 15,4,7. RETURN 


F7 


cload 1t 


F8 


cont. RETURN. 


F9 


list. RETURN. 


F10 


cls: run. RETURN. 



SEGUNDA PARTE 



COMANDOS, SENTENCIAS 
Y FUNCIONES DEL BASIC MSX 



COMANDOS DE AYUDA AL PROGRAMADOR 



• AUTO 

• DELETE 

• LIST 

• LLIST 

• NEW 

• RENUM 

• KEY LIST 



AUTO < num, línea>, <incremento> 

Numera automáticamente las líneas de un programa. 

• < núm. Iínea>: línea de inicio del programa, 

• < íncremento>: salto entre líneas. 

AUTO empieza la numeración en <núm. Iinea> y va numerando las 
siguientes según el valor de <incremento>. 

Si AUTO genera un número de línea utilizado anteriormente con otra 
instrucción, aparecerá un asterisco. {*) Pulsando RETURN, conservara 
el contenido de la línea y generara una nueva. De lo contrario cualquier 
entrada que se efectúe en esa línea, anulara la anterior. 

Para anular eí comando AUTO, pulsar CTRL - STOP ó CTRL-C. 



AUTO: Numera desde ía línea 10 con incrementos de 10: 

10 

20 
30 



AUTO 120; Numera desde (alinea 120 con incrementos de 10: 

120 
130 
140 



AUTO 100,5: Numera desde la línea 100 con incrementos de 5: 

100 
105 
110 



AUTO,5: Numera desde ia línea 0 T con incrementos de 5: 

0 
5 
10 



DELETE < núm. línea a> — <núm> línea b> 

Borra las líneas de programa comprendidas entre < nú m.línea 
a> y <núm. línea b>. 

• <núm. línea a>: linea de inicio de borrado 

• <núm. línea b>: última línea a borrar. 

Si el número de línea especificado en <núm. línea b> no existe en el 
programa, se producirá el error: «Niegal function calí». 



DELETE 10-60: Borra desde la línea 10 hasta la 60. (ambas inclusive), 

DELETE 20; Borra la linea 20. 

NOTA.- También puede borrar una sola línea, escribiendo el núm. de 
línea y pulsando RETURN: 

20 (RETURN). 

LIST <n° línea a>-<n° línea b> 

Lista el programa por pantalla. 

• <n° línea a>: línea de inicio del listado. 

• <n° línea b>: línea final del listado. 

Podemos detener momentáneamente el listado, pulsando STOP. Pul- 
sando STOP de nuevo, continuará el listado. 

Para anular la función LIST, pulsar CTRL-STOP. 



LIST 


; lista todo el programa. 


LIST 10 


: lista la línea 10 del programa, 


LIST 10-50 


; lista desde la linea 10 hasta la 50. 




(ambas inclusive). 


LIST -50 


: J ista hasta la I ínea 50. 


LIST 50- 


: lista desde la línea 50 hasta el final del 




programa. 



LLIST <n° línea a> - <n° linea b> 

Lista el programa por impresora. Funciona igual que LIST, (ver LIST). 



NEW Borra el contenido de fa memoria RAM de usuario. 



RENUM <n° linea nuevo, <n° línea actual>, <¡ncremento> 
Cambia la numeración de las lineas de un programa. 

• <n° línea nuevo>: línea inicial de la nueva numeración. 

• <n° línea actual>: línea inicial de la numeración actual. 

• <incremento>: Salto entre líneas que se utilizará en la nueva nume- 

ración. Si no se especifica, será 10. 



RENUM cambia también las referencias de los números de línea que 
acompañan a GOTO, GOSUB, THEN, ELSE, ON GOTO, ON GOSUB y 
ERL. 



RENUM 


: Renumera el programa desde Ja linea 




10 con incrementos de 10, 


RENUM 1000 


: Renumera y traslada el programa 




a partir de la linea 1000 con 




incrementos de 10. 


RENUM 100, 60,5 


: Traslada a la linea 100 numerando 




con incrementos de 5 t el programa que 




estaba en la línea 60: 



10 REM $ EJEMPLO RENUM $ 

20 PRINT LÍ HIT BIT 11 

30 PRINT "BASIC " 

50 PRINT *MSX 11 

60A = 8 

70 PRINT A 

77 B = 10 

85 PRINT B 

90 GOTO 70 



RENÜM 1000, 60,5 

10 REM $ EJEMPLO RENUM $ 

20 PRINT "HIT BIT" 

30 PRINT J1 BASÍC" 

50 PRINT "MSX" 

1000 A - 8 

1005 PRINT A 

1010B = 10 

1015 PRJNT B 

1020 GOTO 1005 



REM <comentarios> 

Es un comando no ejecutable por el ordenador que permite hacer 
comentarios dentro de un programa. 

•<comentarios>: Comentarios introducidos para diferenciar las 
distintas partes de un programa, siendo útil únicamente en los lista- 
dos ya que REM no es ejecutado por el ordenador. 



10 REM PROGRAMA PRINCIPAL 
100 REM SUBRUTINA 1 
600 REM CONTADOR 



KEY LIST 

Lista el contenido de todas las teclas de función (F1-F10). 



KEY LIST (RETURN) 
color 
auto 
goto 
list 



run 

color 15,4,7 

cload" 

cont 

list. 

run 



Color corresponde a ia tecla F1, Auto a F2, Goto a F3 y así sucesiva- 
mente, hasta F1G. 



COMANDOS DE PROGRAMACION 

• RUN 

• STOP 

• CONT 

• END 

• TRON 

• TROFF 

• FOR/NEXT 

• GOTO 

• IF.. THEN.. ELSE 

• IF.. GOTO.. ELSE 

• GOSUB 

• RETURN 

• ON... GOTO 

• ON„. GOSUB 

RUN <n° línea> 

Ejecuta el programa a partir del número de lineas especificado. 

•<n° linea> : número de línea donde empezará la ejecución del pro- 
grama. Si no se especifica, ejecutará el programa desde el 
principio. 



RUN : Ejecuta todo el programa. 

RUN 120 : Ejecuta el programa a partir de la línea 120. 



STOP 

Detiene la ejecución de un programa y se pone a la espera de nuevas 
órdenes. 

Cuando el ordenador encuentra un STOP, imprimirá el siguiente men- 
saje; 



BREAK IN x ( x es el núrTL de línea donde se encuentra ei STOP). 



A diferencia del comando END, STOP no cierra ficheros. 

La ejecución del programa puede continuar utilizando el comando 
CONT- (ver CONT.}. 



CONT 

Continua la ejecución de un programa después de un BREAK o STOP. 
No podrá utilizarse en los siguientes casos: 

1 . Cuando la interrupción sea debida a un error, (ver código de Errores). 

2. Cuando se efectúe cualquier modificación dentro del programa. 

3. Cuando se incorpore una nueva línea en el programa. 

Al utilizar CONT en cualquiera de estos casos se imprimirá el mensaje 
de error: «Can't continúen 



END 

Termina la ejecución de un programa, cierra todos los ficheros y se 
pone a la espera de nuevas órdenes. Es opcional. 



TRON 

Visualiza en pantalla los números de línea por los que pasa el programa 
durante su ejecución, facilitando así el descubrimiento y la corrección 
de errores. 

Puede introducirse como instrucción directa antes de la ejecución del 
programa. 



TROFF 

Anula la función de TRON, 



FOR <variabie> = <valor inicial> TO <valor final> STEP <¡ncre- 
mento> 

Se utiliza conjuntamente con la sentencia NEXT para establecer una 
sección de programa que se repita un número dado de veces. (Bucle 
FOR NEXT). 

• <variable>: Debe ser numérica, Inicialmente tendrá asignado ei 

< valor inicial> p incrementándose, según el valor espe- 
cificado en < incremento hasta alcanzar el <valor f¡- 
nal>. 

• <valor inicial>: Valor inicial que tendrá la <variable>. Puede ser un 

número ó una expresión matemática en la que apa- 
rezcan valores numéricos y/o variables relaciona- 
dos por operadores. 

• <valor final>: Valor final que tomara la <variable>. 

• <incrementos>: Define el valor del paso o salto que, sucesivamente, 

incrementará o decrementará el valor de la <varía- 

ble> según sea positivo o negativo. 

Si no se especifica, el incremento será 1. (STEP1). 

NEXT <variable, 

Es la última instrucción de un búcle FOR NEXT. 

*<variable> Nombre de variable que identifica el bucle FOR NEXT. 

Debe corresponder con la variable especificada en FOR. 

NEXT, puede adoptar 3 formas distintas: 

NEXT ; cierra el último bucle en caso de que hubiese 

varios. 

NEXT A : cierra el bucle identificado con la variable A. 

NEXT A t B : cierra primero el bucle identificador con la 

variable A y luego el identificado con la 
variable B 



1. Imprime el cuadrado de los 100 primeros números: 
10 FOR I - 1 TO 100 
20PRINTIA2 
30 NEXT I 



2. imprime todos los números pares de 0 a 100 en modo decreciente. 



10FORÍ - 100 TO 2 STEP-2 

20 PRINTI 

30NEXTI 



3. Lee una lista de 10 números con READ/DATA y los imprime 
en pantalla. 



10FORX- 1TO10 
20 READ A (X) 
30 PRINTA(X) 
40NEXTX 

60 DATA 100, 45, 320 p 65, 43, 22, 4, 8, 9, 2. 



Dentro de un mismo programa pueden utilizarse bucles FOR/NEXT 
anidados, ejecutándose unos dentro de otros, (no pueden entrela- 
zarse). 

Bucles anidados correctos Bucles anidados incorrectos 



GOTO <num. Iinea> 

Salto incondicional al número de linea especificado. 

•<núm. Iinea>; número de línea en el que continuara la ejecución del 
programa. 



i 10 FOR A = 1 T02 



i — 10 FOR A — 1 T02 
i 20 FOR B = TOS 




30 PRINTA.B 
^40 NEXTA 

1 50NEXTB 

60 END 



1 50 NEXTA 

60 END 



Es caso de especificar un número de línea que no existe en el programa 
se imprimirá el siguiente mensaje de error: "Undefined líne number '. 



10 GOTO 40 
20 END 

40 PRINT "VENGO DE LA LINEA 10" 
50 GOTO 20 



IF <1 a expresiór» THEN <2 a expresión> ELSE <3 a expresión > 

IF es un «si» condicional. Es decir, si Ja <1 a expresión> se cumple, 
entonces (THEN) ejecuta la <2 a expresión> J que puede ser un número 
de línea, con lo cual pasará el control del programa a dicho número de 
línea, o bien una instrucción concreta. 

Si ía <1 a expresión> no se cumple, pasará a ejecutar la<3* expresíón>, 
que igualmente puede ser un número de línea o una instrucción con- 
creta. 



10 IF A = B THEN 80 ELSE 140 

Si A es igual a B, entonces (THEN) ve a la línea 80, 

De lo contrario (ELSE), ve a Ja 140, 



10IFA = B THEN PRINT M A=B" "ELSE PRINT" HH A<>B" 
Si A es igual a B, entonces (THEN) imprime "A = B". 
De lo contrario (ELSE) T imprime M A<>B". 



Si no se utiliza ELSE y la < 1 a expresión> no se cumple, continuará la 
ejecución en ia siguiente línea del programa. 



10 IF A = B THEN PRINT "A = B" 
20 PRINT "A<>B M 
Si A es igual a B imprimirá "A = B 11 . 
De lo contrario, imprimirá "AoB". 



IF <1*expresión> GOTO <núm. Iinea> ELSE <2 a expresión> 

Es similar a IF THEN ELSE con la diferencia que GOTO irá siempre 
acompañado de un número de línea. 
(Ver IF THEN ELSE) 



10 IF A - 20 GOTO 60 ELSE C = 0 



GOSUB <num. Iinea> 

Desvia Ja ejecución del programa hacia una subrutina. 
• <núm. Iinea>: linea de inicio de la subrutina. 

Una subrutina, es un pequeño programa que realiza una función con- 
creta. Si durante un programa se necesita realizar una determinada 
función varias veces, en lugar de escribir las lineas de programa que 
realizan dicha función tantas veces como se precise ejecutarla, se 
escribe una sola vez convirtiéndola en una subrutina. 

A lo largo del programa, el ordenador se dirigirá a dicha subrutina 
tantas veces como se le indique retornando a la ejecución normal del 
programa principal una vez haya realizado la subrutina en cuestión. 



RETURN 

Retorno, desde una subrutina, al programa principal. Es la última ins- 
trucción de una subrutina, continuando la ejecución del programa en la 
instrucción siguiente a la que fue llamada mediante GOSUB. 



10 PRINT "EJEMPLO SUBRUTINA" 
20 GOSUB 500 

30 PRINT "VUELVO DE LA SUBRUTINA" 
35 END 

500 PRINT "ESTOY EN LA SUBRUTINA 11 
510 RETURN 



ON <expresión> GOTO < lista n" línea> 

Salta a un número de linea del programa, determinado por el valor de 
<expresión> 

•<expresión>: variable ó expresión de cuyo valor depende el número 
de línea donde se efectuara el GOTO. 



•<lista n° línea>: número de líneas correspondientes a los saltos que 
efectuará GOTO, según el valor de <expresión> Por 



ejemplo, si el valor de <expresión> es 3 P se hará un 

GOTO con el 3 ef número de la lista. 

Los números de linea deberán estar separados por 

coma. 



ON A GOTO 70,100,190, 600. 

• Si A = 0, salta a la instrucción siguiente a ON,, GOTO 

• Si A = 1, salta a la línea 70. 

• Si A = 2, salta a la línea 100. 

• Sí A = 3, salta a la línea 190 

• Si A ^ 4, salta a Ja línea 600 

• Si A> = 5, salta a la siguiente instrucción a ON GOTO. 



ON <expresión> GOSUB < lista n° línea> 



Es similar a ON GOTO, con la diferencia de que los saltos se 
efectuaran a las subrutinas, cuyas líneas de inicio son las indicadas 
en <lista n° línea>. 



ON A*5 GOSUB 100,300 

• Si A*5 - 0, Salta a la instrucción siguiente a ON.. GOSUB. 

• Sí A*5 = 1 T Salta a iasubrütina que empieza en la línea 100. 

• Si A*5 = 2, Salta a la subrutína que empieza en la línea 300, 

• SiA*5 = 3 P Salta a la instrucción siguiente a ON.. GOSUB. 



DEFINICION E INICIALIZACION 



• 


CLEAR 


• 


DIM 


• 


ERASE 


• 


DEFINT 


• 


DEFSNG 


• 


DEFDBL 


• 


DEFSTR 


• 


DEFUSR 


• 


USR 


• 


KEY 


• 


TIME 



CLEAR 

Asigna a todas las variables numéricas el valor cero y borra todos los 
datos acumulados en las variables alfanuméricas. 



Usado como comando, seguido de un número, además de realizar las 
funciones descritas, en el párrafo anterior, reserva el número especifi- 
cado en BYTES para las cadenas relativas a las variables alfanuméricas. 



CLEAR 


: Asigna a todas las variables el valor cero. 


CLEAR 500 


: Asigna a todas las variables el valor cero, y 




reserva 500 Bytes para las cadenas 




relativas a las variables alfanuméricas. 



NOTA: Inicíalmente, el ordenador reserva un espacio de 200 Bytes para 
cadenas alfanuméricas, pudiendoser ampliado mediante CLEAR si 
las necesidades del programa lo requieren. 



DIM variable, <(dimensión)> 

Dímensiona una variable subindicada (numérica o alfanumérica), de- 
terminando el número máximo de elementos que podrá contener. 

* <variable>: variable a dimensional 

• <dimensión>: dimensión de la variable 
(ver apartado 1 .5.2. variables subindicadas) 

Las variables subindicadas podrán tener uno o más subindices y por 
consiguiente, capaces de albergar simultáneamente varios valores. 



DIM A (10) 
DIM A (2,5) 
DIM A (2,3,2) 
DIM A (2,2,3,4,,..) 



ERASE <listade variables> 

Borra las ^variables dimensionadas especificadas en < lista de varia- 
bles:^ con el fin de poder dimensionarlas de nuevo sin que se produzca 
el error; lL Redimensioned Array". 

•<lista de variables> : variables dimensionadas a borrar. 



10 DIM A (15) 

20 FORI = OTO 15 

30 A (I) = J + 1 

40NEXTI 

50 ERASE A 

60 DIM A (20) 



Sin la instrucción de la línea 50, ERASE A, no podemos dimensionar de 
nuevo la variable A en la línea 60, pues se producirá el error, 'Redimen- 



sioned Array", ya que una misma variable no puede dimensionarse dos 

veces. 



DEFINT <listadevaríable> 

Define Jas variables especificadas como enteras, {sin parte decimal) 
• <listade variables>: variables que van a ser def inidas como enteras. 
Deben ir separadas por una coma. 



10 DEFINT A, B t X 

20 A = 7.18: B = 16.8: X= 1,6 

30 PRJNT A; B; X 

(ñUN) 
7 16 1 



DEFSNG <listadevariables> 

Define las variables especificadas, en simple precisión. (Se repre- 
sentaran 6 dígitos como máximo). 

• < lista de variables>: variables que van a ser definidas en simple 
precisión. Deben ir separadas por una coma. 



10 DEFSNG A.B.X 
20 A - 128345,6342 
30 B - 3256.83716 
40 X = 12.684372 
50 PRINTA;B;X 
(RUN) 

128345 3256,83 12.6843 



DEFDBL <listadevariables> 

Define las variables especificadas, en doble precisión. (Se representa- 
ran 14 dígitos como máximo). 

•<lista de variables>: variables que van a ser definidas en doble preci- 
sión. Deben ir separadas por coma. 



10 DEFDBL A t B 




20 A = 30/4.3:6 = 


45/87 


30 B - PRINT A;B 




(RUN) 




6.9767441860465 


0.51724137931034 



DEFSTR <listadevariabíes> 

Define las variables especificadas como alfanuméricas, 

• Oista de vanables>: variables que van a ser definidas como 
alfanuméricas. Deben ir separadas por coma. 



10 DEFSTR A,B 

20 A = ' 'BASIC 1 ' 

30 B = "MSX 1 ' 

40 PRINT A + M "+B 

(RUN) 

BASIC MSX 



NOTA: En todos Jos comandos de declaración de caracteres (DEFINT, 
DEFSNG, DEFDBL, DEFSTR), puede especificarse también un rango de 
variables a declarar Por ejemplo, DEFINT A-D s define las variables 
A.B.C.D.deíipo entero. 

DEFFN <nombrex{lista de parametros)> = <definición de la 
funcion> 

Permite definir una función por el usuario. 

•<nombre>: Puede ser el nombre de cualquier variable. Este <nom- 
bre>, precedido de FN, será el nombre de la función. 

•<(listade parámetros>: Estará compuesta por todas las variables que 
existan en la <definíción de la función> y serán sustituidas al llamar a 
dicha función. Las variables deben estar separadas por coma. 



•«áefinición de Ja función>: Expresión matemática que realiza las 
operaciones de la función definida, estando limitada a una linea (255 
caracteres). 

Las variables utilizadas en esta expresión, únicamente sirven para defi- 
nir la función, no influyendo las variables del programa que tengan el 
mismo nombre. Si en posteriores llamadas a esta función, se omite el 
valor de una variable será tomado su último valor. 
La Ñamada a la función se realizará utilizando la siguiente estructura; 
FN <nombre> <(valores de las variables)>. 



10 DEFFNR (A,B) = (A*B)/2 

60 A — FNR (4 T 5) 
70 PRINTA 

(RUN) 

10 



Si se realiza la llamada de una función antes de que esta haya sido 
definida, se producirá el error; «Undefined userfunction». 
DEFFN no puede utilizarse como instrucción directa. 

DEFUSR <número> = <dirección> 

Define la dirección de inicio de una subrutina en lenguaje máquina. 

• <número>: número de la subrutina USB, Debe ser un entero entre 0 

y 9, Si se omite, se asignará por defecto el valor 0. 
(DEFUSR 0) 

• <dirección>; Dirección de inicio de la subrutina USR especificada. 



DEFUSR 0 = 53248 



USR <número> <(x)> 

Ofrece el resultado obtenido ai ejecutar una rutina en lenguaje máquina 
que empieza en la dirección definida por DEFUSR. 

• <número>: Identifica la subrutina con un número determinado que 
debe ser un entero entre 0 y 9. Si se omite, se asignará 
por defecto el valor 0. (USR0) 



• <(x)>: Parámetro que será utilizado por la subrutina en lenguaje 
ensamblador. 

KEY <número>, <"expresión rf > 

Define las teclas de función F1 a F10 

•<número>: número de la tecla de función a definir. Debe ser un 
entero entre 1 y 10, 

•<«expresión»>: sentencia, comando, función, operación, etc., que 
se va a definir. 

Puede tener como máximo 15 caracteres. 



KEY 1, "BASIC MSX" 
KEY 3, "SQFT 
KEY 4, "3.1416" 

AS - "ORDENADOR": KEY 5, A$: KEY 7, "LPRINT". 

Para utilizar el contenido de (astéelas programadas, 
ejecute KEY LIST (ver KEY LIST para más detalles}. 

TIME 

Temporizador interno del sistema. Al iníeiaiizar el sistema se pone a 
cero y va incrementándose en 1 cada vez que VDP genera interrupción 
(60 veces por segundo}. Dividiendo el valor de TIME por 60 obtendre- 
mos un contador de segundos, 

TIME es una variable especial del sistema. Automáticamente toma el 
valor 0 y va incrementándolo, aunque también podemos asignarle un 
valor inicial por programa, (TIME = <valor>) 



10 LOCATE 17,2: PRINT INT (TIME/60) 
20 GOTO 10 



4. COMANDOS Y FUNCIONES DE l/O 

• READ 

• DATA 

• RESTORE 

• INPUT 

• LINE INPUT 

• LET 

• MID$( ) = Y$ 

• PRINT 

• PRINT USING 

• LPRINT 

• LPRINT USING 

• LPOS 

• SWAP 

• INKEY$ 
• INPUT$ 

• FRE 

• POKE 

• PEEK 
• VPOKE 

• VPEEK 

• INP 
•OUT 

• WAIT 

• STICK 

• STRIG 



READ < lista de variables> 

Lée los datos correspondientes a una sentencia DATA, asignándolos a 
las variables especificadas en < lista de varíables>. 

< lista de variables>: Pueden ser numéricas o alfanumérícas y la única 
condición que deben cumplir es que estén sepa- 
radas por coma. 



READ A$, B, C. 



READ se utiliza conjuntamente con DATA. Cuando el Ordenador en- 
cuentra una sentencia READ, buscará el DATA correspondiente en 
cualquier lugar del programa. 



10 READ A$, B 

500 DATA PEDRO, 23 



Cuando el ordenador llega a la línea 10, realizará una operación de 
lectura en el DATA de la línea 500, asignando a la variable AS el valor 
PEDROyaBel valor 23. 



DATA <l¿stadedatos> 

Constituye un archivo de datos dentro del programa, que en cualquier 
momento pueden ser leídos por READ. 

< lista de datos>: Pueden ser números, caracteres ó ambas cosas y 
deben estar separados por coma. Estos valores se- 
rán asignados sucesivamente a las variables de 
READ. 

El número de datos contenido en < lista de datos > nunca puede ser 
menor que el número de variables contenida en <lista de variables> 
de la sentencia READ, De otra torrna, se originaria el error ' Out of 
Data". 

0 

Si dentro de < lista de datos> querernos introducir un dato que con- 
tenga signos especiales como coma ( P ) dos puntos etc., éstos 
deberán ir entre comillas. Las comillas no pueden utilizarse como dato 
dentro de DATA. 



10 REM3E EJEMPLO READ/DATA$ 
20 FOR I - 1 TO 2 
B0 READ A$, B$, CS 
50NEXTI 

60 DATA HIT, BIT, 55, SONY 
70 DATA BASIC, MSX 

En la primera operación de lectura (1 = 1), los valores asignados a A$ p 
B$ y CI son respectivamente: HIT r BIT, 55. 

En la segunda lectura (I = 2), los valores asignados serán: SONY, BA- 
SIC, MSX. 

RESTORE <nünr línea> 

Indica el número de línea donde se encuentra el DATA que contiene los 
datos a leer por READ. 

Si no se indica <núm. Iínea>, se restablecerá el orden de lectura, 
colocando el puntero en el primer dato de la primera línea DATA del 
programa. 



10 READ A$, B 

50 RESTORE 
60 READ A$,B 

100 DATA PEDRO, 23 



Sin la instrucción RESTORE de la línea 50, se produciría el error k 'OUT 
OF DATA "; ya que el READ de la línea 60, intentaría leer los datos 
posteriores a PEDRO, 23 que no existen. De esta forma, restablecernos 
el orden de lectura, colocando el puntero en el primer dato (PEDRO), 
por lo que las instrucciones de las líneas 10 y 60, leerán los mismos 
datos. 



10 READA1B 

50 RESTORE 520 
60 READC,D,E,F 



500 DATA PEDRO, 23 
510 DATA 100, 200 
520 DATA 400, 350, 600 
530 DATA 800, 900 



La línea 10, lee los datos PEDRO, 23. 

La línea 50, hace que el próximo READ se efectúe a partir de la J ínea 520, 
originándose los siguientes valores: C =400, D = 350, E = 600, 
F = 800, 

Sin la instrucción de la línea 50 (RESTORE 520) T los valores se habrían 

asignado de la forma: 

C = 100, D = 200, E - 400, F = 350. 

INPUT <lista de variables> 

Asigna un valor T introducido desde el teclado, a una variable. 

• < lista de variables> Variables (numéricas o alfanuméricas) a las que 
serán asignados los valores introducidos desde 
el teclado. 

Si durante la ejecución del programa éste se encuentra con el comando 
INPUT, la ejecución se detendrá, apareciendo en pantalla un interro- 
gante (?) T y permanecerá a la espera hasta que introduzcamos un dato 
desde el teclado, que será asignado a la variable asociada al comando 
INPUT. 



INPUT A 
INPUT AS 



El comando INPUT nos permitirá, si así lo deseamos, incluir un men- 
saje, que deberá ser escrito entre comillas, y que en el momento de 
ser ejecutado se imprimirá en la pantalla. 



20 INPUT "ESCRIBE UN NUMERO: ";X 

30 PRINT 'EL CUADRADO DE"; X; "ES"; X*X 

Al ejecutar el programa anterior, el ordenador nos pedirá el valor de X: 



ESCRIBE UN NUMERO: ? 



Una vez introducido, se lo asignará a la variable X y continuará con la 
ejecución del programa imprimiendo el cuadrado del valor introducido. 

Con un solo comando INPUT, pueden asignarse varios valores a distin- 
tas variables, siempre que estén separadas por coma: INPUT A,B t C> 
Asi mismo, al introducir los datos desde el teclado, deberemos separar- 
los por coma. 



10 INPUT "INTRODUZCA LA FECHA"; D,M,A 

(RUN) 

? 31, 12,84 



Si en un comando INPUT, que tiene asociada una variable numérica, 
introducimos un valor alfanumérico, se imprimirá el mensaje de error: 
«Redo from start», permaneciendo de nuevo a la espera del dato. 
(Recuerde que después de teclear el valor de entrada debe pulsar la 
tecla RETURN). 



10 INPUT "Ay B"; A,B 
20 PRINT A*B 
(RUN) 

Ay B? 10, PE 

REDO FROM START 

A y B? 10, 20 

200 

OK 



10 INPUT "SU NOMBRE"; NO$ 
20 PRINT "HOLA," ; NOSf 



10 INPUT Jt NOMBRE Y EDAD:" N$ t E 
20 PRINT, N$; "TIENE "; E; "AÑOS H 



UNE INPUT <variable> 

Asigna una cadena de caracteres, introducidos desde el teclado, a una 
variable alfanumérica. El número máximo de caracteres de la cadena es 
254. 

•<variable>: variable alfanumérica a la que se asignará la cadena de 
caracteres introducida desde el teclado. 

LINE INPUT es similar a INPUT, teniendo en cuenta las siguientes 
diferencias: 

• No imprime el interrogante. 

• Sólo puede utilizarse con variables alfanuméricas 

• Sólo puede utilizarse con una variable 



10 LINE INPUT "NOMBRE, APELLIDOS Y 
DIRECCION; ";A$ 
(RUN) 

NOMBRE, APELLIDOS Y DIRECCION: 



Todos los caracteres, introducidos hasta que se pulse RETURN, serán 
asignados a la variable AS. 

LET <variable> = <expresión> 
Asigna un valor a una variable, 

• <variables>: variable a la que se asignará el valor <expresión>. 

Puede ser numérica o alfanumérica. 

• <expresión>: valor que se asignará a Ja variable especificada. 



LET A - 50 

LET A$ = "NOMBRE" 

LET C - A+B 



LET es opcional, ya que directamente, puede asignarse una expresión a 
una variable mediante el signo «igual» (=}, sin utilizar dicho comando. 



Asi, las siguientes instrucciones realizan la misma función: 



10 LET A = 100 
10 A = 100 



MID$ <(X$ S N,M)> = Y$ 

Extrae M caracteres de ia variable X$ t a partir de la posición. N, sustitu- 
yéndolos por M caracteres de la variable Y$. 

Si se omite M t se colocarán todos los caracteres de YS. 
Y$ no debe ser mayor que X$. 



10 A$ = "ORDENADOR" 
20 B$= "SONY" 
30MID$ (A$, 3,3) « B$ 
40 PRINT A$ 
(RUN) 

ORSONADOR 



PRINT <expresión> 

Imprime en pantalla la <expresión> 

• <expresión>: Puede ser de varios tipos: 

1 . Valores n um érí eos : 
PRINT 50 

2. Variables numéricas cuyos valores han sido asignados previamente: 
10A = 3 

20 PRINT A 

Imprime en pantalla: 3 

3. Variables de cadena cuyos valores han sido asignados previamente: 
10A$= "MSX" 

20 PRINT A$ 

Imprime en pantalla: MSX 

4. Expresiones que contienen operaciones aritméticas o lógicas: 
10A = 10 

20 PRINT 3*2+ A 

Imprime en pantalla: 26 (resultado de 3*2+ 10) 



5. Cadenas encerradas entre comillas: 
10 PRINT 'BASIC MSX 11 
Imprime en pantalla: BASIC MSX 

Las expresiones separadas por coma se imprimirán en dos campos 
distintos: 



10 A = 5: B - 10 
20 PRINT A,B 
(RUN) 
5 10 



Las expresiones separadas por punto y coma (;) se imprimirán a conti- 
nuación de la anterior teniendo en cuenta que las expresiones numéri- 
cas estarán separadas por dos espacios. 

Si al final de la última expresión de un comando PHINT hay un punto y 
coma, la próximasentencia PRINT se imprimirá a continuación de ésta. 

Si se utiliza PRINT sin ninguna expresión, se imprimirá una línea en 
blanco. 

El símbolo de interrogación (?) puede utilizarse en lugar de la palabra 
PRINT: 



PRINT 10 
? 10 



Ambas expresiones realizan la misma función, (imprimen en pantalla: 
10). 

PRINT USING < Formato >; <expresión> 

• Imprime en pantalla la <expresión> utilizando el <formato> especi- 
ficado. 

• <Formato>: caracteres que definen el formato de impresión. 

• <expresíón> : variables o expresiones que van a ser impresas con 

el formato especializado. Deberán estar separadas 
por coma. 

Cuando se usa PRINT USING para imprimir variables alfanuméricas, 
pueden utilizarse los siguientes caracteres, para su formateado: 
1. "! M índica que sólo se imprimirá el primer carácter de la variable 
alfanumérica. 



2. "-f "■■ el signo de adición indica que el signo del número a escribir se 
colocará delante o detrás del mismo. 



PRINTUSING " + # # 


; 1.26,-1.25 


+ 1.25 -1.25. 




Ok 




PRINT USING L # ## .# # + ' 


; 1.25,-1.25 


(RUN) 




1.25+ 1.25- 





3. el signo de sustracción al fina! del formato, implica la coloca- 
ción de dicho signo al final de los números negativos. 



PRINTUSING "## # ##— 1,25, -1.25 
Ok 

1.25 1.25- 



4. '** * ,r : un doble asterisco al principio del formato indica que apare- 
cerá el asterisco en los lugares en que sobre espacio, previos al 
dígito. También indica dos o más lugares para dígitos. 



PRINT USING"** # # . #";125, -1.25 

*1.25 *-\M 
Ok 



5. Lt £ £ ' f aparecerá el símbolo de la libra inmediatamente a la izquierda 
del número en cuestión. Los £ £ ofrecen dos posiciones más de 
dígitos, una de las cuales es el signo de la libra La forma exponencial 
no puede ser usada con £ £ . 



PRINT USING lL £ £ # # 5680 

í 5680 

Ok 



A$ = "España" 
Ok 

PRINT USING T; A$ 
E 

Ok 



2. "\ n espacios V\ indica que van a imprimirse 2+n caracteres de la 
variable alfanuméríca. 



A$ = "España 11 
Ok 

PRINT USING "\ \";A$ 

ESPÁÑ 

Ok 



3. índica que serán impresos todos los caracteres de la variable. 



A$ = "España" 
Ok 

PRINT USING " Me gusta mücho &"; A$ 

Me gusta mucho España 

Ok 



Cuando se usa PRINT USING para imprimir datos numéricos, pueden 
utilizarse los siguientes caracteres para su formateado: 

1 . " # 1 ' se usa para representar cada posición de dígito. Si el número a 
ser impreso tiene menos dígitos que posiciones especificadas, el 
número será precedido por tantos espacios en blanco como # so- 
brantes. 



PRINT USING "###*í 10.983, 8.6, 764.3 

(RUN) 

10,98 8.60 764.30 



6. "**£"; combina ios efectos de ios dos símbolos anteriores. Los 
espacios en blanco serán ifenados con asteriscos y ef signo de fa 
fibra aparece antes deí número. Los * * £ ofrecen tres posiciones 
más de dígitos, uno de ios cuaíes es £ . 



PRINT USING' * * £#.##"; 12.35 

* £12.35 

Ok 



7. una coma situada a la izquierda del punto decimal en la secuen- 
cia implica que una vez ejecutada la sentencia, aparecerá una coma 
situada tres dígitos a la izquierda del décima*. Una coma situada al 
final de la secuencia, se imprimirá al final del número. 



PRINT USING "# # # # t # # 1234.5 

1,234.50 

Ok 

PRINT USING "# #■# #.# # f "; 1234.5 

1234.50, 

Ok 



8. "*-*•*•*'•: convierten el número dado en exponencial. 



PRINT USING £< # #.# # 234.56 
235E+02 

Ok 

PRINT USING "#.# # # -"; -12,34" 

1.23E+01- 
Ok 

PRINT USING ,l -h#.# # ; 12.34, -12.34 

+ 1.23E+01 - T23E+01 
Ok 



9. "%": si el número a imprimir tiene más dígitos que ios previstos en la 
instrucción, se imprimirá el símbolo % ¡unto al número. Lo mismo 



sucede si la operación de redondeo causa que el número contenga 
más dígitos de los previstos. 



PRÍNT USING 4, # #.# 123.45 

% 123.45 

Ok 

PRINT USING #';,998 

% 100 

OK 



Si el número de dígitos excede de 24. aparece el mensaje de error 
«(Ilegal function cali», 

LPRINT 

Imprime en impresora. Sigue las mismas normas que PRINT, {ver 
PR1NT para más detalles). 

LPRINT USING 

Imprime en impresora con un formato específico. Sigue las mismas 
normas que PRINT USING. (ver PRINT USING para más detalles). 

LPOS 

Realiza la función de POS referida a la impresora (Ver comando POS 
para más detalles). 

SWAP <X>,<Y> 

Intercambia los valores de las variables especificadas. Ambas variables 
deben ser del mismo tipo (enteras, simple precisión,,,.) de lo contrario 
se producirá el error: 'Type mismatch/ 1 

• <X>: variable que tomará el valor de la variable <Y>, 



• <Y>: variable que tomará el valor de la variable <X>, 



10 A - 5: B = 10 

20 PRINT "A = ";A,"6 

30 SWAP A,B 



"; B 



40 PRINT 'TV = "; A/'B = ";B 
(RUN) 

A = 5 B - 10 
A = 10 B = 5 



INKEYS 

Devuelve una cadena de un sólo carácter definido por la pulsación de 
una determinada tecla. Si no se pulsa ninguna tecla durante el periodo 
de observación, devuelve una cadena nula. 

Debido a la corta duración de los ciclos de observación, INKEY $ se 
sitúa dentro de alguna clase de bucle para que sea observado continua- 
mente, 



10A$- INKEYJ 
20IFAI = u " GOTO 10 

INPUT${x) 

Detiene el programa hasta que se hayan introducido x caracteres. Los 
caracteres introducidos no serán visualizados en pantalla. Pulsando 
CTRL-C ó CTRL-STOP se anulará JNPUT$ (X). 



10XJ = INPUT${25) 



FRE <(expresión)> 

Determina el número de BYTES libres en memoria RAM. 

•<(expresión}>: Puede ser cualquier carácter alfanumérico, no influ- 
yendo en el resultado. Si el carácter va entre comillas, 
nos indicará el número de BYTES reservados para las 
cadenas relativas a variables alfanuméricas. (Ver 
CLEAR para más detalles). 

PRINT FRE (X) 
PRINT FRE( U Z") 



POKE <dirección> t <dato> 

Escribe un dato en la posición de memoria especificada. 

• <dirección>: Dirección de memoria donde se escribirá el dato. Debe 

estar comprendida entre -32768 y 65535. 

Si el valor es negativo, la dirección real será 65.536 

menos el valor especificado. {-1, será calculado como 

65.536-1 = 65.535.) 

(ver Mapa de memoria) 

• <dato>: Dato (BYTE) que va a ser escrito en la dirección de memoria 

especificada. Debe ser un número entre 0 y 255. 



POKE 63.522 T 65 



PEEK <{d¿rección)> 

Es ia función complementaria de POKE. Lée el dato (número entero 
entre 0 y 255) almacenado en la dirección de memoria especificada. 

•<(dirección)>: Dirección de memoria donde se encuentra el dato que 
deseamos leer. 



Para visualizar el dato leído, utilizaremos PRINT. 



PRINT PEEK (63.522} 



VPOKE <dirección> T <dato> 

Almacena un dato en la dirección especificada de la V RAM. (memoria 
de pantalla). 

•<dirección>: Debe ser un número entero entre 0 y 16.383. (ver Mapa 
de memoria). 

•<dato>: Dato (BYTE) que va a ser almacenado en la dirección de 
memoria especificada. Debe ser un entero entre 0 y 255. 



VPOKE 14500, 65 



VPEEK <(dirección)> 

Es ia función complementaria de VPOKE. Lée el dato (número entero 



entre O y 255) almacenado en la dirección especificada de la VRAM 
(memoria de pantalla). 

•<dirección>: Debe ser un número entero entre 0 y 16.383. 



PRINTVPEEK (14500) 



INP <port> 

Lee el BYTE almacenado en el port especificado. 

•<port>: número del port donde va a efectuarse la lectura. Debe ser 
un entero entre 0 y 255- 

¡NP es la función complementaria de OUT 



INP (&H92) 



OUT <port>, <valor> 

Escribe un BYTE en el port de salida especificado. 

•<port>: número del port donde va a efectuarse la operación de 
escritura, Debe ser un entero entre 0 y 255. 

•<valor>: Dato (BYTE) que va a ser transmitido. Debe ser un entero 
entre 0 y 255. 



OUT&H9G,3 



WAIT <port>,Y,Z 

Efectúa una pausa hasta que el dato del port de entrada cambie a un 
valor determinado, 

•<port>: número del port de entrada utilizado. 

La secuencia de operaciones que implica la ejecución de esta instruc- 
ción, son tas siguientes: 

1. Lee el dato en <port> 

2. Opera en forma OR exclusiva (EX-QR) el dato leído con el valor Z. 



I 



3. Efectúa el producto lógico AND entre el resultado de la operación 
EX-ORyel valor Y. 

Si el resultado es 0, realiza de nuevo todo el proceso. En caso 
contrarío prosigue la ejecución del programa a partir de la instruc- 
ción que sigueaWAIT. 



STICK<(N)> 

Determina el movimiento realizado por el Joystick, dando un valor 
numérico según la siguiente codificación: 



Movimiento 


STÍCK (N) 


• Centro 


0 


• Ascendente 


1 


• Diagonal derecha ascendente 


2 


» Derecha 


3 


• Diagonal derecha descendente 


4 


• Descendente 


5 


• Diagonal izquierda descendente 


6 


• Izquierda 


7 


• Diagonal izquierda ascendente 


8 


•<(N)>: indica el Joystick utilizado. 




N = 0: teclado 




N = 1: Joystick 1 




N = 2; Joystick 2 





Conecte el Joystick 1 y mueva ía palanca para visualizar los distintos 
valores tomados según el movimiento realizado: 



10 LOCATE 5,3 
20 PRINT ST/CK(1) 
30 GOTO 10 



STRIG <(N)> 

Toma el valor -1 al pulsar el botón de disparo del Joystick. Si no se pulsa 
toma el valoro. 

•<(N)>: Indica el Joystick utilizado; 

N = 0: teclado (botón de disparo = barra espadadora) 

N = 1 : Joystick 1 

N = 2: Joystick 2 



INTERRUPCIONES 



• ON KEYGOSUB 

• KEY (N) ON/OFF/STOP 

• ONSTRIGGOSUB 

• STRIG (N) ON/OFF/STOP 

• ON STRIG GOSUB 

• STOP ON/OFF/STOP 

• ONSPRITE GOSUB 

• SPRITE ON/OFF/STOP 

• ON INTERVAL = < > GOSUB 

• INTERVAL ON/OFF/STOP 

ON KEY GOSUB <n° de línea> 

Interrumpe el programa principal al pulsar una determinada tecla de 
función (F1 -F10), pasando a realizar la subrutina de interrupción indi- 
cada en <n° de linea>. 

•<n°de linea>: números de líneas iniciales de lassubrutinas. 



ON KEYGOSUB 100, 200, 350, 760,... 



100 es ¡a línea de inicio de la subrutina de interrupción correspon- 
diente a la tecla de función F1. (KEY (1)). 



I 



200 es la línea de inicio de la subrutina de interrupción correspon- 
diente a la tecla de función F2. (KEY {2)). 



Al producirse una interrupción, se ejecutará automáticamente un KEY 
{n> STOP, (ver comando KEY ON/OFF/STOP) 

Si dentro de la subrutina de interrupción no se ha especificado KEY- 
(n)OFF, después de ser ejecutado el RETURN, (retorno de la subrutina 
al programa principal) se ejecutará también un KEY(n)ON, quedando de 
nuevo habilitada Ja interrupción para esta tecla. 

Si se produce una interrupción de error (debida a un comando ON 
ERROR}, se inhibirán automáticamente todas las interrupciones, (in- 
cluidas ERROR, STRIG, STOP, SPRITE, ÍNTER VAL, KEY). 

KEY ON/OFF/STOP 

Se utilizan para habilitar/inhibir interrupciones con las teclas de fun- 
ción Fn. (KEY(n)}. 



• KEY(n)ON: Permite interrupción con la tecla de función Fn. (KEY(n). 



10 


KEY (1) ON 


20 


ON KEY GOSUB 200 


30 


REM PROGRAMA PRINCIPAL 


40 


FOR X = 1 TO 100 


50 


PRINT X 


60 


NEXT X 


70 


CLS 


80 


GOTO 30 


200 


REM SUBRUTINA DE INTERRUPCION 


210 


CLS. 


230 


PRINT "HAS PULSADO FV 


230 


FOR 1-1 TO 100 



240 LOCATE 0,10: PRINT I 
250 NEXT I 
260 CLS 
270 RETURN 



En la línea 10, indicamos al ordenador que «permitimos» interrumpir el 
programa pulsado F1. 

En la línea 20, le indicamos que si durante el transcurso del programa 
principal se pulsa la tecla F1 , pase a ejecutar la subrutina que empieza 
en la línea 200. 

El programa principal (10-80) se ejecutará con toda normalidad hasta 
que pulsemos F1 , momento en que se detendrá, pasando a ejecutar ia 
subrutina de interrupción correspondiente. Una vez finalizada la ejecu- 
ción de esta subrutina el programa seguirá su curso a partir del punto 
donde fué interrumpido, pudíendo ser interrumpido de nuevo del 
mismo modo anterior. 

KEY(n)OFF: Inhibe la interrupción de la tecla de función Fn. (KEY(n)). 

Si en el ejemplo anterior sustituimos la línea 10 por: 10 
KEY (1) OFF, aunque pulsemos F1, no se interrumpirá el 
programa siguiendo éste su curso normal. 

KEY(n)STOP: Si previamente a KEY(n)STOP se habintó la interrupción 
medíante KEY(n)ON s al pulsar la tecla Fn no se producirá 
interrupción, pero memo riza ra que se pulsó dicha tecla y 
pasará a ejecutar la subrutina correspondiente después 
de encontrar la autorización de interrupción KEY{n)ON. 



10KEY(1)ON 

20 PRINT "BASIC MSX" 

30 KEY(1)STOP 

40 ON KEY GOSUB 500 



100 PRINT "FIN = F1" 



110KEY(1)ON 



500 PRINT TIN" 
510 RETURN 



Aunque pulsemos F1 P el programa no será interrumpido hasta que 
aparezca el mensaje que imprime la línea 100: «FIN - F1 », ya que es en 
la linea 110 donde se habilitó de nuevo la interrupción para F1, 

ON STRIG GOSUB <n° de lineas> 

Interrumpe el programa principal cuando se pulsa el botón de disparo 
de ios Joysticks o la barra espaciado ra del teclado. 
Su luncionamiento es similar a ON KEY GOSUB. {Ver ON KEY GOSUB 
para más detalles). 

STRIG(n) ON/OFF/STOP 

Se utilizan para habilitar/ anular interrupciones con el botón de disparo 
de los Joysticks o con la barra espaciadora del teclado. 

(n) debe ser un número entero entre 0 y 4. 

• n = 0 :1a barra espaciadora es utilizada como botón de disparo. 

• n = 1 ó 3: se utiliza el botón de disparo de Joystíck 1 . 

• n - 2 ó 4: se utiliza el botón de disparo det Joystick 2. 

Su funcionamiento es similar a KEY ON/OFF/STOP (Ver KEY ON/OFF/ 
STOP para más detalles), 

ON STOP GOSUB <n°. de línea> 

Interrumpe el programa principal al pulsar CTRL-STOP, pasando a 
realizar la subrutina de interrupción cuya linea de inicio es la indicada 
en <n c , de linea>. 

Utilize con precaución este comando. Por ejemplo, el siguiente pro- 
grama no podrá detenerse. La única solución es hacer un RESET ó 
desconectar el aparato: 



10ON STOP GOSUB 40 
20 STOP ON 
30 GOTO 30 
40 RETURN 



STOPON/OFF/STOP 

Se utilizan para habilitar/anular interrupciones mediante CTRL-STOP. 
Su funcionamiento es similar a KEY ON/OFF/STOP. (ver 
KEY/ON/OFF/STOP), 

ON SPRITE GOSUB <n° línea> 

Interrumpe el programa principal cuando se solapan dos SPRITES en la 
pantalla. 

Su funcionamiento es similar a ON KEY GOSUB (ver ON KEY GOSUB 
para más detalles), 

SPRITE ON/OFF/STOP 

Se utilizan para habilitar/anular interrupciones cuando coinciden dos 
SPRITES. 

Su funcionamiento es similar a KEY ON/OFF/STOP. (ver KEY 
ON/OFF/STOP para más detalles). 

ON INTER VAL = <tiempo> GOSUB <n° Jinea> 

Interrumpe el programa principa! cada periodo de tiempo especificado 
en <tiempo>/60. 



10 ON INTERVAL = 60 GOSUB 500 



Al ejecutar esta línea, cada segundo (60/60) se interrumpirá el pro- 
grama principal para ejecutar la subrutina que comienza en la línea 500. 

Su funcionamiento es similar a ON KEY GOSUB, con la diferencia de 
que la interrupción se producirá automáticamente cada cierto tiempo, 
sin tener que pulsar ninguna tecla. 

INTERVAL ON/OFF/STOP 

Se utiliza para habilitar/anular interrupciones temporales con INTER- 
VAL. 

Su funcionamiento es similar a KEY ON/OFF/STOP. 



(Ver KEY ON/OFF/STOP para más detalles). 



6. FUNCIONES NUMERICAS 



• ABS 

• INT 

• FIX 

• SGN 

• CDBL 

• CSNG 

• CINT 

• EXP 

• LOG 

• SQR 

• SIN 

• COS 

• TAN 

• ATN 

• RND 



ABS{X} 

Da el valor absoluto de X. El resultado siempre será positivo. 



10 PRINTABS (-5) 
(RUN) 



INT (X) 

Calcula el mayor entero menor o igual a X r 



10 PRINT INT (2.56) 
(RUN) 
2 



10PRINT INT (—2.56) 
(RUN) 
— 3 



FIX (X) 

Da la parte entera de X. FIX (X) es equivalente a SGN (X) * INT (ABS(X)). 

La mayor diferencia entre FIX e INT es que cuando trabajan con núme- 
ros negativos (X<0) FIX da la parte entera por exceso e INT por defecto. 



10 PRINT FIX (—2.56) 
(RUN) 
—2 



SGN (X) 

Determina el signo de X: 



Si X>0 : SGN (X) = 1 
Si X<0 : SGN (X) - —1 
Si X = 0 : SGN (X) = 0 



CDBL (X) 

Representa el número X en doble precisión. 



10A = 53.45567893141785 
20 PRINT CDBL (A) 
(RUN) 
53,455678931418 



CSNG (X) 

Representa el número X en simple precisión. 



10 A = 45.987666666634 
20 PRINT CSNG (A) 
(RUN) 
53.4457 



CINT(X) 

Representa ei número X como entero, eliminando la parte decimal. X 
debe estar comprendido entre —32768 y 32767. En caso contrario se 
producirá error de Overflow (desbordamiento) 



10 A - 45.98765 
20 PRINT CINT<A) 

(RUN) 

45 



EXP{X) 

Calcula la expresión e\ x debe ser menor o igual a 145,06286085862 
(e, es la base de los logaritmos naturales e - 2,7182818284588). 



10 PRINT EXP(2) 
(RUN) 
7.38905609893 



LOG (X) 

Calcula el logaritmo neperiano de X. (logaritmo en base e). 

Para obtener el logaritmo de X en otra base (base Y) deberá realizar la 
siguiente operación: 

LOG (X)/LOG (Y) = Logaritmo de X en base Y. 



1, logaritmo neperiano de 4: 
10 PRINT LOG (4) 

(RUN) 
1.3862943611199 

2. logaritmo de 1000 en base 10 

10 PRINT LOG (1000)/LOG (10) 
(RUN) 
3 

SOR (X) 

Calcula ia raíz cuadrada de X. X debe ser un número mayor o igual a 
cero, De lo contrario se producirá el error: "II legal function cali. 11 

10 PRINT SQR (25) 
(RUN) 
5 



SIN(X) 

Da el valor de seno de X. (en radianes). 
El cálculo se efectúa en doble precisión. 



10 PRINT SIN (3.1416/2) 
(RUN) 
.99999999999324 



COS (X) 

Da el valor de coseno de X. (en radianes). 
El cálculo se efectúa en doble precisión. 



10 PRINT COS (0) 
(RUN) 
1 



TAN (X) 



Da el valor de tangente de X (en radianes). 
E! cálculo se efectúa en doble precisión. 



10 PRINT TAN (0.1) 
{RUN) 
.10033467208545 



ATN (X) 

Da el ángulo (en radianes), cuya tangente es X. El resultado estará 
comprendido entre — ji/2 y +ji/2. El cálculo se efectúa siempre en 
doble precisión. 



10 PRINT ATN (0.3) 

(RUN) 
.29145679447789 



RND (X) 

Genera un número aleatorio entre 0 y 1 . 

El argumento de RND, X, se utiliza para controlar la generación del 
número aleatorio. Cada vez que se ejecute un programa que contenga 
RND, se generará la misma secuencia de números aleatorios. Durante 
la ejecución de un programa, si X<0 se generará la misma secuencia 
anterior. Si X = 0 repetirá el último número generado y si X>0 T generará 
el próximo número aleatorio de la secuencia. 





10 PRINT RND (1)*100 




20 PRINT RND (— 1)*100 




30 PRINT RND (0)^100 




40 PRINT RND OH 00 




(RUN) 




59.521943994623 




4.384820420821 




4.384820420821 




9.62486816692 



I 



CONVERSION DE CODIGOS 



• ASC 

• CHR$ 

• BIN$ 

• OCT$ 

• HEX$ 

• VAL 

• STR$ 



ASC<(X$)> 

Determina el código ASCII del carácter X$. 



10 A$ = "A" 
20 PRINT ASC (A$) 
30 PRINT ASC ("B") 
(RUN) 

65 

66 



CHR $ (X) 

Realiza Ja función inversa de ASC. Determina el carácter que en código 
ASCII corresponde al número X + 



10 PRINT CHR $ (65) 
(RUN) 
A 



BIN$ (X) 

Convierte el número decimal Xen un número binario. El valórele X, debe 
estar comprendido entre —32768 y 65535. 

Si X es negativo, dará el valor resultante de restar a 65.535 el valor de X. 
(65.535 — X). 



10PRJNT BIN${67) 
(RUN) 
1000011 



OCT$ (X) 

Convierte el número decimal X en un número octaL El valor de X, debe 
estar comprendido entre —32768 y 65535. 



Si X es negativo, dará el valor resultante de restar a 65.535 el valor de X. 

(65535— X). 



10 PRINT OCTS(76) 
(RUN) 
114 



HEX$(X) 



Convierte el número decimal X en un número hexadecimal. El valor de 
X, debe estar comprendido entre — 32768 y 65.535. 

Si X es negativo, dará el valor resultante de restar a 65.535 el valor de X. 
(65535 — X). 



10 PRINT HEX$ (94) 
(RUN) 
5E 



WALfXt} 

Determina el valor numérico de los primeros caracteres numéricos de 



10 A$ = ' l 125A43" , 
20 B$ = "15C" 
30 PRINT VAL (AS) 
40 PRINT VAL (A$>+ VAL (B$) 
50 PRINT VAL (A$+B$) 
(RUN) 

125 

140 

12515 



STR$ (X) 

Realiza la función inversa de VAL (XS). 



10A$ - STR${22) 
20 B$- "BASIC" 
30 PRINT A$ + BS. 

(RUN) 

22 BASIC 



8. CADENAS DE CARACTERES 



• RIGHT$ 

• LEFTS 

• MID$ 

• STRINGS (N,X) 

• STRING$ (N,X$) 

• SPACE$ 

• INSTR 

• LEN 



RIGHT$<{X$.N)> 

Extrae N caracteres de ía cadena X$ empezando por la derecha. 
Si N = LEN (X$), nos dará X$ 



10 A$ = "BASIC MSX" 
20 PRINTRIGHT$(A$,6) 
30 PRINTRIGHT$(AS,3) 

(RUN) 

IC MSX 

MSX 



LEFT$<(X$,N)> 

Extrae N caracteres de la cadena XS empezando por la izquierda. 



10 A$ = "BASIC MSX" 
20 PRINT LEFT${A$,7) 
30 B$ - LEFT$(A$,3) 
40 PRINT BS 

(RUN) 

BASIC M 

BAS 



MID$<(X$ 5 N 5 M)> 

Extrae N caracteres de la cadena X$, empezando por la izquierda, a 
partir de la posición M. 



10 A$ - "ORDENADOR SONY 
20B$ = MID$(A$, 8, 5) 
30 PRINT B$ 

40 PRINT MIDS("MSX'\ 1,2) 
(RUN) 
NADOR SONY 
S 



STRING <{N, X)> 

Crea una cadena con N caracteres X, en código ASCII. 



10 PRINT STRING $ (3,65) 
(RUN) 
AAA 



NOTA: El ASCII de 65 es A. 
STRJNG$ <<N, XS)> 

Crea una cadena con N caracteres XS ¡guales. 



10 AS - H Á tf 

20 PRINT STRINGS (5,A$) 
(RUN) 
AAAAA 



SPACE$<(X)> 

Devuelve una cadena de X espacios. El vaior de X debe estar compren- 
dido entre 0 y 255. 



10A$ = SPACES (5) 
20 PRINT A$ 



INSTR<(N,X$ T Y$)> 

Analiza sí la variable Y$ está contenida en la variable X$, a partir de la 
posición N. 

X$ e Y$, pueden tener un máximo de 255 caracteres. 



Si Y$ no está contenida en X$> nos dará el valor 0. De lo contrario nos 
daráel número de la posición a partir del cual Y$está contenido en X$. 



20 


A$ = "ORDENADOR V 


20 


B$ = "DENA 11 


30 


PRINT INSTR (2 P A$„B$) 




(RUN) 




3 



LEN <(X$}> 

Calcula el número de caracteres que contiene la cadena X$. 



10 A$ = 'ORDENADOR SONY" 
20 PRINT LEN (AS) 
(RUN) 
14 

10 A - LEN ("SONY 1 ) 
20 PRINT A 
(RUN) 
4 



9. PROCESO DE ERRORES 



• ON ERROR GOTO 

• ERL/ERR 

• RESUME 

• ERROR 

ON ERROR GOTO <n° linea> 

Interrumpe el programa principal al producirse un error, pasando a 
realizar la subrutina de interrupción especificada en <n° linea>. 

•<n° linea>): linea inicial de le subrutina de interrupción. 

Una vez activada la interrupción, todos los errores detectados, inclui- 
dos los errores en modo directo (p,e. "Syntax error 11 ) irán a la subrutina 
de error. 

Para desactivar la interrupción de ERROR, debe ejecutarse ON ERROR 
GOTO 0. Los siguientes errores imprimirán en pantalla su mensaje de 
error correspondiente y detendrán la ejecución del programa. 

Una instrucción ON ERROR GOTO 0 que empieza en una subrutina de 
interrupción de ERROR detendría el programa, imprimiendo el mensaje 
de error que causó la interrupción. 

Si se produce un error durante Ja ejecución de la subrutina, se imprimirá 
el mensaje correspondiente y se detendrá la ejecución. 

Dentro de una subrutina de ERROR no puede producirse una interrup- 
ción de ERROR. 



ERL/ERR 



Cuando se produce una interrupción de error, Ja variable ERR contiene 
el código del error producido (ver códigos de error) y la variable ERL 
contiene el número de linea en ei que se origino el error 

ERR y ERL se utilizan normalmente con la instrucción IF THEN para 
dirigir el programa hacía una subrutina de error. 
Si la instrucción que motivó el error fué una instrucción en modo 
directo, ERL será igual a 65.535. Para comprobar si se ha producido 
error en una instrucción directa puede utilizarse: IF 65535 = ERL 
THEN,,. De lo contrario, puede utilizarse: 

IF ERL = <número de línea> THEN... 
IF ERR = <código de error> THEN... 

Al ser ERL y ERR variables reservadas, no pueden aparecer a la iz- 
quierda del signo igual ( = ) en una instrucción LET. 

RESUME 
RESUME 0 
RESUME NEXT 
RESUME <núm linea> 

Continua la ejecución de un programa tras haber rectificado el error 
indicado. 

• RESUME o RESUME 0: La ejecución se reanuda en la instrucción que 

causó el error, 

• RESUME NEXT: La ejecución se reanudaen Ja instrucción siguiente a 

la que causó el error. 

• RESUME <núm. Iinea>: La ejecución se reanuda en el número de 

línea especificado. 

Una instrucción RESUME que no esté en la subrutina de error, provoca 
el error: "RESUME without". 

ERROR <códigos> 

Imprime en pantalla el mensaje de error correspondiente al código de 
error especificado en <códígos>, si éste valor es menor de 60. Si 
<código> está comprendido entre 60 y 255 se utiliza para la definición 
de errores por el usuario. 



•<código>: Debe ser un número entero comprendido entre 1 y 255, 
siendo 1 al 59 s códigos reservados para el BASIC y el 
resto códigos para definición del usuario. 



10 ON ERROR GOTO 1000 



1201 FAS - "N'THEN ERROR 250 



1000IFERR - 250THEN PRINT ll ESTAS SEGURO? ir 



Si una instrucción de error especifica un código para el 
cual no se ha definido ningún mensaje de error se produ- 
cirá el error: UnpríntabJe error". 

La ejecución de una instrucción de error para la que no 
hay subrutina de interrupción causará el mismo error 
anterior 



10 ON ERROR GOTO 500 



60 PRINT SQR (—2) 



500 IF ERR = 5 THEN RESUME NEXT 



10. PANTALLA Y GRAFICOS 

• SCREEN 

• WIDTH 

• CLS 

• COLOR 

• LOCATE 

• TAB 

• SPC 

• POS 

• CSRLIN 

• KEY ON/OFF 

• PSET 

• PRESET 

• LINE 

• CIRCLE 

• PAINT 

• DRAW 

• SPRITEI 

• PUTSPRITE 

• POINT 

• BASE 



SCREEN <modo>, < tamaño Sprites>, <sonido teclado, <veloci- 

dad de transmisión;», <¡mpresora> 
Define los parámetros especificados. 



•<modo>: Selecciona la pantalla para trabajar con texto ó con gráfi- 
cos. 

• 0 : Modo texto <40 X 24) 

• 1 : Modo texto (32 x 24) 

• 2 : Modo gráfico (256 x 192) 

• 3 : Modo gráfico {256/4 x 192/4) 

Cada punto en modo 3, corresponde a 16 puntos en modo 2. 
(4 x 4), 

•<tamaño Sprites>: Determina el tamaño del Sprite, 

• 0: 8 x 8 normal 

• 1: 8 x 8 ampliado 

• 2: 16 x 16 normal 

• 3: 16 x 16 ampliado 

•<sonido teclado: Habilita ó inhibe el sonido producido al pulsar 
uñatéela, {"clik"). 

• 0: sin sonido 
» 1: con sonido 

•<velocidad de transmisión>: Determina la velocidad de transmi- 
sión de un programa en cassette. 

• 1:1,200 Baudios. 

• 2: 2.400 Baudios. 

La velocidad de almacenamiento (cassette), también puede determi- 
narse con el comando CSAVE, utilizando la opción <velocídad>. 

•<impresoras>: Especifica si la impresora conectada es MSX o no. 
Si la impresora no es MSX, los símbolos gráficos son convertidos a 
espacios. 

• 0: MSX 

• 1: no MSX 



WIDTH <(X)> 

Proporciona una pantalla con X caracteres por Jínea en modo texto, 
(ver comando SCREEN) 

• <(X)>: número de caracteres por línea. Debe ser un entero com- 
prendido entre 0 y 39 en modo 40 x 24 o entre 0 y 31 en 
modo 32 x 24. 




CLS 

Borra el contenido de la pantalla, manteniendo el programa almace- 
nado en memoria. 

COLOR <X>, <Y>, <Z> 
Define el color de la pantalla, 

•<X>: color de los caracteres. 
•<Y>: color del fondo. 
•<Z>: color del margen. 

El valor de <X>, < Y> y <Z>, debe ser un entero comprendido entre 0 
y 15. 

Si se omite alguno de estos parámetros, mantendrá el valor anterior, 

Al inicializar el sistema, los valores asignados son X = 15, Y = 4, 
X = 7. (COLOR 15,4,7) 

El color del margen sólo puede visualizarse en SCREEN 1 , SCREEN 2 h 
y SCREEN 3 (Inicialmente el ordenador está en SCREEN O). 



Código de colores: 



0 — 


Transparente 


1 — 


Negro 


2 — 


Verde 


3 — 


Verde claro 


4 — 


Azul oscuro 


5 — 


Azul claro 


6 — 


Rojo oscuro 


7 — 


Azul celeste 


8 — 


Rojo 


9 — 


Rojo claro 


10 — 


Amarillo oscuro 


11 — 


Amarillo claro 


12 — 


Verde oscuro 


13 — 


Magenta 


14 — 


Gris 


15 — 


Blanco 



LOCATE <X>, <Y> 

Sitúa el cursor en una determinada posición de la pantalla (solo puede 
utilizarse en SCRREN 0 y SCREEN 1 ). 



•<X>: coordenada horizontal. Debe ser un entero comprendido en- 
tre 0 y el valor máximo de la anchura de pantalla menos 1 . 

•<Y>: coordenada vertical. Debe ser un entero comprendido entre 0 
y 22. 

LOCATE se utiliza normalmente para situar el punto inicial de escri- 
tura utilizando los comandos PRINT e INPUT en la siguiente instruc- 
ción del programa. 



10 LOCATE 10,12: PRINT "LOCATE 11 

10 LOCATE 5,10: INPUT "NOMBRE:"; AS 



TAB <{X)> 

Desplaza el cursor (X) espacios en sentido horizontal. 

•<(X}>: número de posiciones a desplazar. Debe ser un entero entre 
0 y 255. 

TAB, sólo puede utilizarse con PRINT y LPRINT. 



10 PRINT TAB (10) "BASIC MSX " 



SPC <:(X)> 

Imprime X espacios en la pantalla 

•<(X)>: número de espacios a imprimir. Debe ser un entero entre 0 y 

255. 

SPC, sólo puede utilizarse con PRINT y LPRINT. 



10 PRINT SPC (10) 



POS<(X)> 

Proporciona la coordenada horizontal actual del cursor. 

•<(X)>: Puede ser cualquier carácter, no influyendo en el resultado. 



10PRINT POS(A) 
10 IF POS(1) = 5 GOTO 200 

CSRLIN 

Proporciona la coordenada vertical actual del cursor. 



10 PRINT CSRLIN 
10 IF CSRLIN - 15GOTO200 

KEY ON/OFF 

Visualiza o borra el contenido de las teclas de función en la última 
línea de la pantalla, 



PSET <(coordenadas)> P <color> 

Dibuja un punto en las coordenadas especificadas con el color indi- 
cado. 



Sólo puede utilizarse en modo gráfico (SCREN 2/SCREEN 3). 



PRESET <(coordenadas)>, <color> 

Borra un punto de la pantalla en las coordenadas especificadas. Si se 

especif ica el parámetro <co!or>, actúa igual que PSET. 

Sólo puede utilizarse en modo gráfico. (SCREEN 2/SCREEN 3), 

NOTA En modo gráfico, la pantalla queda dividida en una rejilla de 
256 puntos horizontales por 192 puntos verticales: 



(0,0) 



(256,0) 



(0,192) 



(256,192) 



10 SCREEN 2 

20 COLOR 1,1,1 

30 FOR A - 1 TO 500 

40 X - ÍNT(RND(1)*255) 

50 Y == INT(RND(1)* 191) 

60 PSET(X,Y) t 15 

70 PRESET(X+1, Y+1) t 2 

80NEXTA 

90 GOTO 30 



LJNE <<coordenada 1}> - <(coordenada2)> ? <color> 

Dibuja una línea entre los dos puntos especificados, con el color 

indicado. 

Sólo puede utilizarse en modo gráfico. (SCREN 2/SCREEN 3). 

•<(coordenada 1)>: coordenadas del punto de inicio. 

•<{coordenada2)>: coordenadas del punto final. 

•<color>: color de la línea, (ver código de colores). 

Si después de <color> se especifica el parámetro 8, dibujará un 
rectángulo, teniendo en cuenta que los puntos dados como coorde- 
nadas deben corresponder a una de las diagonales. 

Asi mismo, si en lugar de especificar el parámetro B se especifica BF, 
pintará un rectángulo con el color indicado en <color>. 



10 SCREEN 2 

20 LINE (10,10) — (240,10), 1 
30 LINE (20,40)— (90 , 100), 2, B 
40 LINE (60,70) — (160,180), 8, BF 
50 GOTO 50 



CIRCLE < (coordenad as}>, < radio, <coJor>, <ángulo de inicio, 
<ángulo final> P <excentricidad> 



Dibuja círculos, elipses y arcos según los parámetros especificados. 
Los únicos parámetros obligatorios son <coordenadas> y <radío>. 
(Sólo puede utilizarse en modo gráfico: SCREEM 2/SCREEN 3). 

• <(coordenadas)>: coordenadas del punto central 

• <radio>: radio 

• <color>: color (ver código de colores) 

• <ángulo inicial> <ángulo final>: ángulo inicial y final de la figura. 
Deben expresarse en radianes, entre 0 y 2 jt. Si el ángulo es negativo, 
la elipse se conectará al punto central con una linea, y el ángulo será 
tratado como si fuera positivo. (Observe que esto es distinto a sumar 
2jt). 

<excentricidad>: Relación entre ios ejes horizontal y vertical. 

Si <exeentricidad> = 2, el eje horizontal será la 
mitad del vertical, permitiendo así definir la forma 
deseada en la elipse. 



5 SCREEN 2 
10 CIRCLE (125, 96), 70 
1QCJRCLE (125,96), 70, 1, , , 1.2 
10 CIRCLE (125, 96), 70, 1 r 0, 2*3.14,2 
10 CIRCLE (125, 96), 70, 1, 0, 2*3.14, 5 
10 CIRCLE (125, 96)70, t, , ,0 



NOTA Para dibujar un círculo debe especificarse en excentricidad la 
relación 1.2. 

PAINT <coordenadas>, <color 1>, <color 2> 
Rellena de color un contorno cerrado. 

Sólo puede utilizarse en modo gráfico (SCREEN 2/SCREEN 3). 

•<coordenadas> : coordenadas del punto desde donde se empezará 
a pintar. 

f corresponden a un punto interior del contorno 
cerrado, rellenará de color el interior de dicho 
contorno, dé lo contrario pintará el exterior. 

•<color 1>: color con el que se rellenará el contorno (interior o 
exterior). 



I 



•<color 2>: color que limita la superficie a pintar con < color 1 >. 

En alta resolución este parámetro no tiene efecto, de- 
biendo ser el color del contorno a pintar del mismo color 
que <color 1>. 

Si no se especifican los parámetros de color, el color utilizado será el 
primer parámetro del comando COLOR actual, (color de los caracte- 
res). 



10 SCREEN 3 
20CIRCLE(125 h 96),50, 1 
30 PAfNT(125, 96), 2, 1 
40 PAINTI10, 10), 10, 1 
50 GOTO 50 



10 SCREEN 2 
20 GIROLE {125, 96), 50, 1 
30 PAINT(125, 96), 1 
40 GOTO 40 



DRAW 

Sentencia de ejecución de los comandos del Macro lenguaje gráfico, 
(ver Anexo de gráficos}. 

SPflfTES 

Variable especial del sistema utilizada para la definición de gráficos 
SPRITE. (Ver Anexo de gráficos). 

PUTSPRITE <n ú plano, <coordenadas>, <color> 
Asigna a un SPRITE los atributos especificados. 
(Ver Anexo de gráficos). 

POINT <(x,y)> 

Ofrece el código de color de un punto de la pantalla. 

• <(x,y)>: coordenadas del punto. 

Si están fuera del rango de visual izacion, el valor obtenido 
es — 1. 

BASE<(x)> 

Ofrece la primera dirección de las tablas del procesador de vídeo 
(VDP) 

• <(x)>: Debe ser un número entero positivo comprendido entre 0y 

19. 

{Para más información, ver anexo 3 "Información Técnica 1 ). 



SONIDO 



• BEEP 

• SOUND 

• PLAY 

• PLAY(N) 



BEEP 

Genera el sonido «Bíp». (CTRL-G). 



10FORI = 1 TO10 
20 BEEP 

30 FORX = 1 TO1Ü0: NEXTX 
40NEXTI 



SOUND < registro del PSG>, <valor> 

Escribe directamente el valor especificado en el registro indicado del 
Procesador generador de sonido. (PSG). 



I 



Registros del PSG 


i« u c i cry i9ii u 


Función 


Valnr 


n 


Frecuencia canal A. 


n 


1 


u-io 


9 
m 


Frecuencia canal B 


\j i j 


O 


U- I 3 


4 


Frecuencia canal C 


0-255 


c 
«j 


U" I o 


fi 

V 


P r£» rupnria Ho niiiH**) 

rrtítrinf nctd ruiuo 


0-31 


7 


Qúl^rrinna un ranal 

oír i tri^ijicji i<j un canal 
para generación de 

tcinnt u rníHn 
lUHuo JF IUIUU 


0-63 


8 


Volumen ranal A 
¥ uiUMICII 1 la 1 n 


V 1 3 

La variación de volumen 
tendrá Uicjar cuando 
se seleccione 16 


Q 


Uní i unan nnnnl O 

V UIUII Itr 1 ■ Ud lldl D 


10 


Volumen canal C 


11 


Frecuencia del patrón 
de variación de volumen 


0-255 


12 




0-255 


13 


Selección del patrón 
de variación de volumen 


0-14 




10FORI - 1 TOSO 

20SOUND 6,0 

30SOUND 7, 55 

40 SOUND 8, 16 

50 SOUND 11, 23 

60 SOUND 12, 2 

70 SOUND 13, 9 

80 FORX = 1 TO100: NEXTX 

90NEXTI 
100 FORI = 1 TO10 
110SOUND7, 55 
120 SOUND 6,0 
130 SOUND 8, 16 
140 SOUND 11,50 
150 SOUND 12, 47 
160 SOUND 13,0 
170 FORX = 1 TO 100: NEXTX 
180 N EXT! 
190 GOTO 10 



PLAY <expresión para VOZ 1>, <expresión para VOZ 2>, < expre- 
sión para VOZ 3> 

Es la sentencia de ejecución de los comandos del macro lenguaje 
musical. Puede interpretar tres voces simultáneamente, en un rango 
de ocho octavas, {ver anexo II: sonido). 

PLAY (N) 

Comprueba si se está ejecutando música. 

• Si N = 1,2, ó 3 T da el valor -1 si se está ejecutando música, de to 
contrario da el valor 0. 

• Sí N = 0, el estado de cada comando del macrolenguaje musical (-1 
ó 0) se opera con OR exclusive y da el resu ltado obtenido. 



12, ALMACENAMIENTO EN CASSETTE 



• CSAVE 

• CLOAD 

• CLOAD? 

• SAVE 

• LOAD 

• BSAVE 

• BLOAD 

• MERGE 

• MOTOR ON/OFF 



CSAVE M < Nombre del Programa>\ <velocidad> 
Almacena en cassette un programa BASIC con el nombre especifi- 
cado en "<nombre deí Programa> *\ 

El formato utilizado es el Binario comprimido, que ocupa menos 
espacio que el ASCI), aunque algunos tipos de acceso, requieren que 
los ficheros estén almacenados con este formato. Por ejemplo, si 
queremos mezclar dos programas, uno de ellos debe estar en código 
ASCII, (ver comando MERGE), 

El comando SAVE, realiza el almacenamiento en formato ASCII. 

• "<nombre del programa>": Nombre asignado al programa en el 

momento de grabarlo en cassette. 
Para cargar el programa desde cas- 



sette a memoria, utilizaremos este 
mismo nombre. El número máximo de 
caracteres significativos es 6. 



•<velocidad>: Determina la velocidad de grabación: 
1: 1.200 Baudios 
2: 2.400 Baudios 

Este parámetro es optativo, ya que si no se especifica, 
el ordenador asignará por defecto el valor 1 . 



CSAVE "PROG" 
CSAVE "PROG1'\2 



CLOAD "< nombre del programa>" 

Carga el programa especificado en «<nombre del programa>», 
desde cassette a la memoria interna del ordenador, borrando el conte- 
nido actual de ia memoria. Anteriormente, dicho programa fué alma- 
cenado en cinta con el comando CSAVE. 



CLOAD "PROG" 



CLOAD? ' < nombre del programa> " 

Carga un programa almacenado en memoria externa (cassette) a la 
memoria interna del ordenador sin borrar e\ contenido actual de la 
memoria interna, estableciendo una comparación entre el programa 
que está cargando y el que está residene en memoria. 

Su función es comprobar si la grabación efectuada con CSAVE ha 
sido correcta. En caso de grabación incorrecta se producirá e\ error; 
"Verify error." 

Una vez grabado el programa en cassette mediante CSAVE, se rebo- 
bina la cinta hasta el punto inicial de grabación y se teclea en el 
ordenador CLOAD? seguido del nombre del programa (enmarcado 
entre comillas). Después, daremos la orden de ejecución pulsando la 
tecla RETURN y pondremos el cassette en marcha. 




Si la grabación ha sido correcta, aparecerá «OK», en caso contrario se 
imprimirá el mensaje de error correspondiente. 



CLOAD? "PROG" 
OK 



SAVE "< nombre del programa>" 

Almacena en cassette un programa BASIC en formato ASCII con el 
nombre especificado en L <nombre del programa :>". 



SAVE "PROG 1 



LOAD "<nombre del programa>" 

Carga eJ programa, especificado en 1£ <nombre del programa>", 
desde cassette a Ja memoria interna del ordenador Anteriormente, 
dicho programa fué grabado con SAVE. 



LOAD-PROG" 



Si después de "< nombre del programa>" se añade:, R, el programa 
se ejecutará automáticamente sin necesidad de utilizar el comando 
RÜN. 



LOAD "PRÜG 1", R 



BSAVE "<CAS: Nombre del programa>'\ <dirección inicial>, <direc- 
ción final>, <dírección deejecución>. 



Almacena en cassette un programa en lenguaje máquina localizado 
en las posiciones de memoria indicadas. (Desde <dirección tnicial> 
hasta <dirección final>). 



Si se omite el parámetro <dírección de ejecución> se asignará por 
defecto el valor de <dirección inicial> r sino, el programa se ejecutará 
a partir de esta posición cuando sea cargado con BLOAD. 



BSAVE "CAS: TEST", &HA0O0, &HAFFF 

BSABE "CAS: GAME 1 ', &HE000, &HE0FF, &HE020 



BLOAD "<CAS: Nombre del programa>" 

Carga desde cassette, un programa en lenguaje máquina, que fué 
grabado mediante BSAVE. 

Si después de "CAS: Nombre del programa>" se añade: , R, el pro- 
grama se ejecutará inmediatamente desde la dirección que se especi- 
fica al grabarlo con BSAVE. El programa, se almacenará en las mis- 
mas posiciones de memoria especificados en BSAVE. 



BLOAD "CAS TEST", R 



MERGE "<nombre del programa>" 

Mezcla el programa especificado en <í <nombre del programa>", con 
el residente en memoria. El programa especificado debe ser un pro- 
grama en formato ASCII (almacenado mediante SAVE). 

Si ambos programas tienen algún número de línea comün r el conte- 
nido final de esta línea será el correspondiente al programa en for- 
mato ASCII. 



MERGE "VIDEO- 



MOTOR O N/OFF 

Pone en marcha o detiene el cassette cuando se utiliza el control 
remoto. 

Si MOTOR no va acompañado de argumento (ON/OFF) pondrá en 
marcha/detendrá el cassette secuencia! mente. Es decir, si el cassette 
está parado lo pondrá en marcha y viceversa. 

Sí se utiliza el control remoto, todas las instrucciones de ficheros 
como CLOAD, CSAVE, PRINT#, INPUT# etc., activarán automáti- 
camente el cassette, 



CONSEJOS PRACTICOS PARA LA UTILIZACION 
DEL CASSETTE 



• Utilice siempre un cassette monofónico. En caso de utilizar un 
cassette stereo, perdería parte de la información. 

• Ponga el volumen del cassette a un nivel MEDIO-ALTO, La graba- 
ción estará sometida a interferencias st el volumen está demasiado 
bajo. Por otra parte, si el volumen está demasiado alto, puede 
producirse distorsión en la señal de salida. 

• SÍ su cassette tiene control de TONO, sitúelo en una posición alta 
(HIGH), ya que la grabación contiene principalmente frecuencias 
altas. 

• Compruebe que las pilas de su cassette están en buen estado 
Recomendamos la utilización de un alimeniador 

• Compruebe que el cabezal está en buenas condiciones de limpieza. 

• Procure utilizar siempre el mismo cassette para la grabación y 
carga de programas, ya que entre distintos aparatos pueden existir 
pequeñas diferencias (velocidad del motor, ajuste de cabezales., 
etc.), que pueden ocasionar errores de carga. 



FICHEROS 



• OPEN # 

m MAX FILES 

• PRINT # 

• PRINT # USING 

• INPUT # 

• INPUT$(n, #) 

• UNE INPUT jt 

• EOF 

• CLOSE # 



OPEN '<periférico>: <nombre ficherc»' 1 FOR <modo> AS # <núm. 
fichero 

Abre un fichero en el periférico especificado, asignándole un número 
determinado que será utilizado por otros comandos de Entrada/Sa- 
lida para especificar el fichero con el que van a trabajar. 

•< periférico >: CAS: cassette, 

CRT: pantalla. 

GRP: pantalla de gráficos. 

LPT: impresora. 

•<modo>: OUTPUT: salida secuencia! de datos, 
INPUT: entrada secuencial de datos. 
APPEND: adición de datos. 



•<núm. fichero: Debe ser un número entero comprendido entre 1 y 
el valor especificado en la sentencia MAXFILES. 
Este número quedará asociado al fichero en cues- 
tión, pudiendo hacer referencia a él otros coman- 
dos de E/S (PRINT# r INPUT#,.,.) t utilizando dicha 
asignación. 



OPEN "CAS: DAT' 1 FOR OUTPUTAS # 1 



Abre el fichero DAT almacenado en cassette (CAS) en modo salida 
(OUTPUT) r asignándole el número 1, (# 1) 

NOTA: Para introducir texto trabajando con pantalla de gráfico 
(SCREEN 2/SCREEN 3), deberá realizar un OPEN «GRP:- 
FOR OUTPUTAS # 1. 



10 OPEN "GRP: H< FOR OUTPUTAS $ 1 

20 SCREEN 2 

30 PRESET (50,100) 

40 PRINT# 1, "BASIC 11 

50 GOTO 50 



La Línea 30 sitúa el punto inicial de escritura, 
MAXFILES = <núm. ficheros> 

Especifica el número máximo de ficheros que estarán abiertos simul- 
táneamente en un programa. 

Si MAXFILES = 0, sólo podrán utilizarse los comandos SAVE y LOAD, 
El valor asignado por defecto es 1, (MAXFILES = 1), 



MAXFILES = 5, indica que en el transcurso del programa, podemos 
tener un máximo de 5 ficheros abiertos (OPEN) simultáneamente. 



PRINT# <núm, fichero> ) <listadedatos> 

PRINT # <núm. fichero> 1 USING <expresión>: <lista de datos> 

Escribe datos en el fichero especificado que posteriormente podrán 
ser leídos mediante la sentencia iNPUT #. 



Antes de efectuar una operación de escritura, debe abrirse el fichero 
en modo salida (OUTPUT). 



10 OPEN ' CAS: DAT" FOR OUTPUT AS # 1 
20 INPUT # 1 t PEDRO r 23 



(Ver PRINT/PRJNT USING para más detalles) 
INPUT # <núm. fichero, <lista de variables> 

Lee datos desde el fichero especificado asignádolos a las variables 
indicadas en < lista de variables>. 

Los datos del fichero, estarán almacenados en el mismo orden en que 
fueron escritos por el comando PRINT # ( por lo que para asignarlos a 
las variables del programa deberemos conocer dicho orden. 

•<núm. fichero>: Es el número con que fué abierto (OREN) el fi- 
chero. 

•< lista de variables>: Pueden ser numéricas o alfanuméricas, de- 
biendo estar separadas por coma. 

Antes de efectuar una operación de lectura, debe abrirse el fichero en 
modo entrada, (INPUT): 



10 OPEN' CAS: DAT" FOR IMPUTAS # 1 
20 INPUT # 1,A$, Bf, C, D$ f E 



JNPUT$<n, # <núm.fichero>) 

Lée una secuencia de n caracteres en el fichero especificado, asig- 
nándolos a una variable. 

•<número de fichero>: es el número con el que fué abierto (OPEN) 
el fichero. 

Antes de efectuar una operación de lectura, debe abrirse el fichero en 
modo entrada (INPUT): 



10 OPEN "CAS: DAT" FOR INPUT AS # 1 
20 A$ - INPUT$(5, # 1) 




LINE INPUT # <núm, fichero>, <variable> 

Lee una línea entera (hasta 254 caracteres) del fichero especificado 
sin utilizar delimitadores, asignando la cadena a una variable aífanu- 
mérica. 

•<núrn r fichero: es el número con el que fué abierto (OPEN) el 
fichero. 

•<variabie>: es la variable a la que se asignara la secuencia de 
caracteres leídos. Debe ser una variable alfanumérica. 



LINE INPUT #, lée todos los caracteres, hasta encontrar un RETURN. 
El próximo LINE INPUT # , empieza a leer desde éste punto hasta el 
próximo RETURN y asi sucesivamente. 

Este comando es especialmente útil en aquellos programas que de- 
ben colocar cada linea de un fichero en un campo determinado o para 
programas que deben leer datos de otro programa almacenado en 
ASCII, 

Antes de efectuar una operación de lectura, debe abrirse el fichero en 
modo entrada {INPUT); 



10 OPEN ,l CAS: DAT 1 FOR INPUT AS # 1 
20 LINE INPUT # 1, A$ 



EOF (<núm\ fichero>) 

EOF tomará el valor — 1 si se ha llegado al final de un fichero secuen- 
cial, {EOF = -1). 

Utilice EOF durante ia iectura de un fichero para evitar errores tipo 
l lnput past end". 



IF EOF ( 1 ) - -1 THEN GLOSE # 1 



GLOSE # <núm, fichero>, <núm. fichero> 

Cierra el fichero ó ficheros especificados en <núm. ficheros 

Si no se indica <núm. fichero> ! cerrará todos los ficheros abiertos. 



GLOSE #1: cierra el fichero 1 

GLOSE : cierra todos ios ficheros abiertos 



NOTA: Las operaciones a realizar cuando trabajamos con ficheros 
pueden esquematizarse según el siguiente organigrama: 



OPEN # 



INPUT# /PRINT# 



GLOSE # 



I 



ANEXOS: 



1. GRAFICOS 

2. SONIDO 

3. INFORMACION TECNICA 

4. PROGRAMAS 

5. CODIGOS DE ERROR 



ANEXO 1: GRAFICOS 

INTRODUCCION 

Además de las funciones gráficas vistas anteriormente (UNE, CIRCLE, 
PSET. ei HIT BIT nos ofrece nuevas opciones; 

— IV! aero lenguaje para gráficos 

— Gráficos SPRITE 

Todas las funciones gráficas, pueden utilizarse conjuntamente, traba- 
jando en modo gráfico (SCREEN 2, SCREEN 3). 

1. MACRO LENGUAJE PARA GRAFICOS 



Utilizando este macro lenguaje, podremos acceder a todos los puntos de 
la pantalla en modo gráfico (256 x 192), para realizar cualquier dibujo. 
Para ello, utilizaremos ia sentencia DRAW, que tiene el siguiente for- 
mato: 



DRAW <expresión string> 



Los comandos del macro lenguaje, son letras que indican el movimiento 
a realizar, y forman parte de laexpresiónstring. El string define un objeto 
que será dibujado al ejecutar la sentencia DRAW. 

Al utilizar los comandos de movimiento (ver tabla I), hay que tener en 
cuenta que el movimiento se iniciará desde el último punto refe rendado. 
Es decir, si inicialmente estamos en (5,20) y ejecutamos un R5 (desplaza- 
miento de 5 puntos a la derecha), el punto final será (10,20), siendo éste, 
el punto de inicio del próximo comando. 



TABLA I: Comandos de movimiento 

n, indica la distancia de movimiento. El número de puntos desplazados 
será n veces el factor de escala, (indicando por el comando S). 

Mx,y r indica desplazamiento absoluto ó relativo. Si se indica X-i- ó X — , el 
desplazamiento será relativo, de lo contrario el desplazamiento 
será absoluto. 

La proporción de la pantalla es 1:1; Es decir que 8 puntos horizontales 
tienen la misma longitud que 8 verticales. 



COMANDO 


MOVIMIENTO 


U n 


+ 


D n 


♦ 


L n 




R n 




E n 




F n 




G n 




H n 




My,y 


X,Y 



Todos los comandos indicados, al ser ejecutados mediante la sentencia 
DRAW, dibujarán siempre el recorrido programado. Si en algún mo- 
mento queremos desplazarnos hasta un punto determinado sin dibujar 
la trayectoria seguida ó queremos dibujarla volviendo al punto inicial, 
utilizaremos los siguientes prefijos: 

B: desplazamiento sin dibujar trayectoria 

N; desplazamiento dibujando trayectoria y volviendo al punto de 
inicio. 



Asi por ejemplo, normalmente lo primero que tendremos que hacer para 
empezar un dibujo, será situar el cursor en la posición inicial sin dibujar 
la trayectoria seguida. Esto podemos hacerlo mediante el comando 
BMx, y r donde «x,y» son las coordenadas iniciales hasta donde quere- 
mos trasladarnos. (Mx.y, dibujaría la trayectoria seguida hasta el punto 
x,y). 

Otros comandos que pueden utilizarse con este macro lenguaje son: 



An: Permite movimiento en el ángulo n, que puede ser de 0 a 3 

(0 = 0 Ü , 1 = 90°, 2 = 180°, 3 = 270°), 



Cn : Da color a los puntos dibujados (n = 0 — 15). Ver código de 
colores. 

Sn : Indica el factor de escala. Ei valor de n debe ser un número entero 
comprendido entre 0 y 255. El factor de escala será n/4. Por 
ejemplo, si n = 1, el factor de escala será 1/4. 
El factor de escala multiplicado por la distancia indicada (n) en los 
comandos de movimiento UAUR^F.G^M P nos dará el número 
de puntos desplazados. 

Si no se indica factor de escala, el valor por defecto será n = 4 

mi 

X <variable string; >: Este comando permite ejecutar un segundo string 
desde otro string, 

Dibujo de un cuadrado: 



10 SCREEN 2 
20A$= "U80R80D80L80" 
30 DRAW k 'BM70, 150XAS;" 
40 GOTO 40 



BM 70, 150 coloca el punto inicial del dibujo en (70, 150), de otra forma, 
el punto inicial sería (0, 0) y no podríamos visualizarlo. 

El comando X, es una parte muy útil de DRAW, pues permite definir 
partes de un objeto separadas del conjunto. Así por ejemplo, sí en un 
dibujo hay un elemento que debe aparecer en distintas posiciones pode- 
mos definir este elemento con el comando X, evitando asi el tener que 
programarlo cada vez que queremos dibujarlo. 

Dibujo de una casa 



1 a ) Hacemos el dibujo en una hoja de papel cuadriculada con un factor 
de escala de 1 cuadro = 5 puntos y fijamos el punto de inicio en (A) 



80,90 




75,140 



105,145 



70,160 90,160 



2 a ) Hacemos el programa del dibujo, dividiéndolo para mayor comodi 
dad en 5 partes: 



A$ = contorno casa 
B$ = chimenea 
C$ = ventana 
D$ - puerta 
E$ = humo 

AS = Ll U40NGH5E25F30H5D40L50" 
BS = "U20R10DKT 
C$ = "U10R10D1QL10" 
D3 - "U20R1GD2CT 
E$ = Jl E10U5E10 M 



3 o ) Determinamos los puntos de inicio de cada objeto: 



A$ — CASA 



A (70, 160) 
B(75, 115) 
C (75, 140) 
D(105, 145) 
E(90, 160) 
F (80, 90) 



B$ — CHIMENEA 
C$ — VENTANA 1 
C$ — VENTANA 2 
D$ — PUERTA — 



E$ — HUMO 



Antes de hacer el dibujo de cada objeto, colocaremos el cursor en los 
puntos correspondientes, mediante el comando MBx,y. 

El programa completo será el siguiente: 



10 SCREEN 2 

20 AS = "U40NG5E25F30H5D40L50" 

30 B$ = "U20R10D10' 

40 CS- U10R10D10L10" 

50 DS - l U20R10D20 1 

60 E$ = -E10U5E10" 

70 DRAW "BM70, 160XAS;"' 

80 DRAW BM75, 115XBS;" 

90 DRAW "BM75, MOXC^; ' 1 
100 DRAW "BM105, 145XC$;" 
110 DRAW "BM90, 160XDS;" 
120 DRAW BM80, 9QXE$: 
130 GOTO 130 



Para mayor comodidad podemos hacer todo el dibujo con una sola 
instrucción. Para ello sustituiríamos las líneas 70-130 por: 

70 DRAW "BM70, 160XA&; MB 75. 115 XBS; BM 75, 140XCS; BM 105, 
145XCS: BM 90, 160 XD$; BM 80, 90 XES; 1 ' 
80 GOTO 80 



PROGRAMA EJEMPLO UTILIZACION MAGRO LENGUAJE PARA 
GRAFICOS 

5 REM$MACRO LENGUAJE GRAFICOS 
10 SCREEN2 

20 REM:A$ = PERFIL CASA. 

30 A$ = "RM7O,130U60BD60R6OU6OBL3OBU4ONF40NG40D2NF38NG38" 
40 REM:B$ = PUERTAS/VENTANAS- 

50 B$ = "BM80 1 70R10D20L10U2QBR3QR1QD20L1GU2QBM90 1 
100R20D30BL20U30BM82 1 70D20BR2U20BR2D20BR2U20BM112 1 
70O20BR2U20BR2D2OBR2U20BM92J00D30BR2U30BR2D30BR2U30BR2 
D30BR2U30BR2D30BR2U30BR2D30" 

55 REM:C$ = CHIMENEA/HUMO. 

58 CS = "BM8050U15R10D5BM90,30E10U10E10BD10R10D10 
L10U10DB10BR20U10F10U10BR10F5NE5D5" 

60 REM:D$ =* PAJAROS. 

70 D$ = "BM170,3DF10E10BM190,40F10E10" 

80 R EM : E$ = CARTEL. H IT B IT 55. 

90 E$ = "BM170.120R60D50L60U50BM180, 

140 U10D5R5D5BR5U5BU2U1BM195, 

140 U10NL2NR2BR10D1QU5R5D5L5BR10U5BU2U1BM220, 

140 U10NL2NR2BM190J60R5U5L5U5R5BD10BR10R5U5L5U5R5BM190, 

130 D20R20U20" 

100 REM:F$ = CAMINO. 

110 F$= k 'BM90 l 14OF10G10F10BM11O p 140F10G10F10" 
150 DRAW'XAS;" 
160 DRAW [< XB$ 
170 DRAW'XCS 



180 DRAW"XD$;" 

190 DRAW"XE$;" 

200 DRAW"XF$;" 

250 FORI =0TO5Ü00 

260 NEXTI 

270 A = RND(1)*15 

280 B = RND(1p5:C - RND(1)*15 

290 COLOR A,B,C 

300 GOTO 10 



GRAFICOS SPRITE 

Hasta ahora, para representar gráficos en movimiento hemos utilizado ta 
sentencia PRINT. Esta forma de representación para la animación grá- 
fica, resulta muy limitada, debido principalmente a que al utilizar la 
sentencia PRINT, los objetos representados deben crearse a partir de 
los símbolos gráficos existentes, por lo que la forma y resolución del 
objeto, no puede ser lo buena que se requiere. 

Por otra parte, el movimiento del gráfico por la pantalla requiere un 
número de instrucciones para controlar su situación. 

Veamos un ejemplo: el siguiente programa simula el vuelo de una nave 
espacial: 

10 CLS 

20 FORA- OTO 26 
30 LOCATE A,10 
40 PRINT "XOX 1 
50 FOR I = 1 TO 40 
60 NEXTI 
70 LOCATE A, 10 
80 PRINT" " 
90 NEXTA 



I 



AJ ejecutar el programa en el ordenador, se observar que la nave espacial 
(XOX) no ha salido muy favorecida, debido a las causas citadas anterior- 
mente, y el control de su movimiento puede llegar a complicar bastante 
el programa si pretendemos que el objeto se mueva por distintas direc- 
ciones... Todos estos inconvenientes quedan subsanados utilizando los 
gráficos SPRITE del HIT BIT, ya que podemos dar al objeto la forma 
deseada, situarlo en cualquier posición de la pantalla, darle una direc- 
ción y velocidad,... etc. 

¿Qué es un SPRITE? 

Un SPRITE, es un objeto programadle, que puede definirse fácilmente 
en BASIC. 



SPRITE, es el nombre que recibe la forma de lograr imágenes más 
naturales, y más fácilmente en un ordenador. En ios gráficos convencio- 
nales, las imágenes se componen en una pantalla simple, como si se 
dibujara en una hoja de papel. Con los SPRITES, el ordenador tiene 
varios planos, cada uno de los cuales contiene su propia Imágen. En el 
caso del HIT BIT, disponemos de 32 planos distintos. 

La manera más sencilla de representar estos planos, consiste en imagi- 
narse láminas de plástico transparente. Si la lámina más cercana al 
observador contiene el dibujo de una estrella, mientras que la última 
incluye la imágen de una nave espacial, ésta será vista pasar por detrás 
de la estrella, como si realmente estuviera flotando en el espacio, 

Al poner vahos elementos en planos separados, podrán crearse efectos 
tridimensionales muy convincentes. 

Otra característica importante de este tipo de gráficos es que para darles 
movimiento tan solo hay que especificar una velocidad y una dirección, 
olvidándonos por completo de cómo fué definido. 

Veamos como mejora el aspecto de nuestra nave espacial utilizando 
SPRITES; Ejecute el siguiente programa: 



10 COLOR 15,4,7 
20 SCREEN2,0 
30 CLS 

40 SPRITES (0) - CHRS(&BO00O000O) + 

+ CHR$(&BO0O0O0O0) + CHR$(&B0Q100100) f 

+ CHR$(&B00111100) + CHR$(&B01011010) + 



+ CHR$(&B 100 11001) + CHR$(&BQ1 111110) f 

+ CHR$(&B00100100) 

50 PUT SPRITE 0 t {5 f 70) 

60 FOR I - 1 TO 256 

70 PUTSPRITEO,STEP{1,0), 15 

80 NEXTI 



Comandos para la utilización de SPRITES en el HIT BIT 

Los comandos utilizados en el HIT BIT para la realización de gráficos 
SPRITE, son los siguientes: 



• SPRITE $<n) 

• PUT SPRITE 

• ON SPRITE GOSUB 

• SPRITE ON/OFF/STOP 



SPRITE $ (n) = <definiciónSPRITE> 

Define la forma del objeto. EJ número de plano (n) debe ser un número 
entero entre 0 y 31. 

Para definir el SPRITE. nos auxiliaremos de una cuadrícula de S x 8: 



I 



Dentro de esta cuadrícula, dibujaremos el SPRITE y a continuación, al 
lado de cada línea, codificaremos su contenido según el siguiente 
criterio: 

— Si una casilla está en blanco, Je asignaremos el valor ll O". 

— Si una casilla está pintada, le asignaremos el valor lí 1 ". 

Finalmente, como estos valores obtenidos son binarios, se lo indicare- 
mos al ordenador mediante el prefijo (si conoce el lenguaje bina- 
rio, puede codificar estos valores en decimal). La definición del SPRITE, 
estará formada por ¡asuma de los 8 CHR$ correspondientes a ios valores 
decodificados. 

Veamos como construiríamos la nave espacial del ejemplo anterior: 

1 o Hacemos el dibujo en la cuadrícula. 

2 o Decodificamos las líneas de la cuadrícula. 

3 o Def i nimos el SPRITE como la suma de los 8 CHRS decodificados. 

1 o Dibujo 




2° Decodificación 



0 


0 


0 


0 


0 


0 


0 


0 


0 


0 


0 


0 


0 


0 


0 


0 


0 


0 


1 


0 


0 


1 


0 


0 


0 


0 


1 


1 


1 


1 


0 


0 


0 


1 


0 


1 


1 


0 


1 


0 


1 


0 


0 


1 


1 1 


0 


0 


1 


0 


1 


1 


1 


1 


1 


1 


0 


0 


0 


1 


0 


0 


1 


0 


0 



3 a Asignación 

SPRITE$ (0) = CHR$(&BO000üOOO) + 
+ CHR$(&B0O000000) + CHR$ (&B00100100) + 
+ CHR$ (&B00111100) + CHRfl (&B01011010) + 
+ CHR$ (&B10011001) + CHR$(&B011111 10) + 
+ CHRSf&BOOlGOlOO) 

Una forma más cómoda de definir e\ SPRITE es utilizando READ/DATA: 





10 


nni dr is a ? 






QPRFFN o n 




uU 


ni es 




tu 


FOR X = 1 TO ft 




SO 


READ AS£¿X1 




60 


BS - BSE + CHR& ÍVALf&B" + AffiíX^ 




70 


NFXT X 

IXtA 1 /V 




80 


SPRITE$(Q) = B$ 




90 


PUT SPRITE 0, (5 T 70) 




100 


FOR i - 1 TO 256 




110 


PUT SPRITE 0 T STEP(1,0) ( 15 




120 


NEXTI 




130 


DATA 00000000 


^/ 


140 


DATA 00000000 




150 


DATA 00100100 




160 


DATA 00111100 




170 


DATA01011010 




180 


DATA 1001 1001 




190 


DATA 01111 110 




200 


DATA 00100100 



Sí queremos que nuestra «nave espacial» aparezca más grande, sustí- 
ruiremos la linea 20 por; 



20 SCREEN. 2,1 (ver sentencia SCREEN) 



También podemos trabajar con SPRITES de 16 x 16 (ampliables con 
SCREEN 2 T 3). El procedimiento será el mismo que en 8 x 8, teniendo en 
cuenta que la cuadrícula será de 16 x 16 y por lo tanto tendremos 16 
líneas de codificación de 16 bits cada una. El principio del programa, 
debemos indicar si trabajamos con SPRITES de 6 x 8 ó 16 x 16 y si van 
a ser ampliables: 



SCREEN X,0— 8x8 normal 
SCREEN X, 1 — 8x8 ampliado 
SCREEN X, 2— 16 x 16 normal 
SCREEN X, 3 — 16 x 16 ampliado 



PUTSPRITE 

Con esta sentencia definimos los atributos del SPRITE (situación, movi- 
miento, color...). Su estructura es la siguiente: 



PUT SPRITE N, (X, Y), <Coior>, <n° SPRITE> 



N = n° piano (0-31) 

(X r Y) - situación del SPRITE 

Color = color del SPRITE 

n d SPRITE — indica el SPRITE al que vamos a asignar los atributos 
anteriores. Este número debe ser menor a 256 si el tamaño 
del SPRITE es 0 ó 1 y menor a 64 si el tamaño es 2 ó 3 (ver 
sentencia SCREEN) 

Para poner el SPRITE en movimiento, Je indicaremos los saltos (STEPS) 
que debe realizar a partir de su posición inicial. Así pues, normalmente 
utilizaremos 2 veces la sentencia PUT SPRITE: una para colocarlo en la 
posición inicial y otra para indicarle el movimiento a realizar. 

En el ejemplo lija línea 50 colocael SPRITE en la posición inicial (5 h 70)y 
en la linea 70 le especificamos que desde la posición anterior, debe 
moverse con saltos de (1 r 0). (desplazamiento horizontal). Si en lugar de 
STEP (1,0) especificamos STEP (0,1), el movimiento será vertical. 



Si queremos que nuestra nave espacial se mueva siguiendo Ja trayecto- 
ria de una sinusoide, cambiaremos las siguientes líneas de programa del 
ejemplo anterior: 



60 FORX = 11 T0 256STEP3 

70 PUTSPRITEO, (X, SIN (X/4)*20 + 70) 



Con las siguientes modificaciones obtendremos un movimiento aleato- 
rio; 



50 PUT SPRITE 0,(127,96) 

60 X = INT(RND)(1)*20n-ir Y:Y - INT(RND<1 )*20)*(-1 )- X 
70 PUT SPRITE 0,STEP(X,Y) 
80 FOR T = 1 TO50:NEXT 
90 GOTO 60 



ON SPRITE GOSUB <n D línea> 

Esta sentencia hará que el programa principal salte a la subrutina de 
servicio, cuya línea de inicio es la indicada en <n° de línea>, cuando 
«chocan» dos SPRITES, sí anteriormente se ha habilitado la interrup- 
ción medíante SPRITE ON. 

SPRITE ON/OFF/STOP 

Para activar/desactivar las interrupciones de SPRITES. 

SPRITE ON: Activa la interrupción 
SPRITE OFF: Desactiva la interrupción 

SPRITE STOP: Si se produce interrupción, la memoriza, pero no salta a 
la subrutina de servicio hasta que se active la interrup- 
ción mediante SPRITE ON 

Antes de la sentencia ON SPRITE GOSUB, hay que especificar si la 
interrupción está activa o no. (SPRITE ON/OFF/STOP). Si se produce 
interrupción, con SPRITE ON, automáticamente se producirá un 
SPRITE STOP, y pasaremos a realiar la subrutina de servicio. 

VARIACION DE LA FORMA DEL OBJETO CON EL MOVIMIENTO 

Hasta aquí, hemos visto cómo mover un SPRITE por la pantalla sin variar 
su forma inicial Si queremos que nuestro objeto dé más sensación de 



movimiento (moviendo las piernas y los brazos al andar por ejemplo), 
tendremos que crear tantos SPRITES como movimientos distintos ten- 
gamos. Es decir, tendremos que hacer un estudio de! movimiento a 
realizar y definir un SPRITE para cada movimiento (imagínese el movi- 
miento en cámara lenta). 



Veamos como visualizar un SPRITE que está «corriendo» 
Los movimientos realizados al correr serán 5: 



Por lo tanto, utilizaremos 5 SPRITES (SPRITES (0) - SPRITES (4)). 
El programa será el siguiente: 



50 
60 



10 COLOR 15.4,7 
20 SCREEN 1,0 
30 CLS 

40 FOHL=0TO4 
FORI-1 TOS 
READ D$(L) 
70 S$(L) - S$( L) + CHR$( VAL( "&B " + D$(L))) 
80 NEXTI 

90 SPRITE$(L)-S$(L) 
100 NEXTL 

100 PUT SPRÍTE 0, ( 1 20,90) , 1 5 t 0 

120 FÜRI = 0TOL-1 

130 PUT SPRITE 0, STEP(2 T 0),15,I 

140 FORT - 1 TO20:NEXT 

150 NEXT LGOTO 120 

160 DATA 0000 1000 

170 DATA00001000 

180 DATA00011100 

190 DATA 00101000 

200 DATA 00001 100 

210 DATA 00001010 

220 DATA00010010 

230 DATA 000 10000 



240 REM 
250 REM 

260 DATA 0000 1000 
270 DATA 0000 1000 
280 DATA 0001 1100 
290 DATA00001010 
300 DATAO0O01000 
310 DATA 00010100 
320 DATA 000 100 10 
330 DATA 000000 10 
340 REM 
350 REM 

360 DATA 00001000 
370 DATA 00001000 
380 DATA 00011110 
390 DATA 00001000 
400 DATA 00001000 
410 DATA 00110100 
420 DATA 00000100 
430 DATA 00000100 
440 REM 
450 REM 

460 DATA 00001 000 
470 DATA 00001 000 
480 DATA 00001 100 
490 DATA 00001 010 
500 DATA 00000100 
510 DATA00000100 
520 DATA 00000100 
530 DATA 00001 000 
540 REM 
550 REM 

560 DATA 00001 000 
570 DATA 00001000 
580 DATA 00001100 
590 DATA 0000 1000 
600 DATA 00010100 
610 DATA 00000 100 
620 DATA 00001000 
630 DATA 00010000 



ANEXO 2: SONIDO 



INTRODUCCION 

Una de las características principales del HIT BIT es que interna- 
mente, lleva incorporado un Procesador generador de sonido que 
le permitirá crear fácilmente sus propias melodías utilizando un 
Macro lenguaje Musical, muy similar al visto anteriormente para 
dibujar. Para ello dispondremos de 8 octavas, 3 Tonos (3 voces si- 
multáneas) y una señal de ruido (para crear efectos especiales). 

MACRO LENGUAJE MUSICAL 

La sentencia de ejecución es PLAY, que realiza una función similar a la 
desempeñada por DRAW\ utilizando un macro lenguaje musical dentro de 
una expresión STRING. El formato es el siguiente: 

PLAY <exp. String para VOZ t», <exp. String para VOZ 2>, <*W String 
para VOZ 3> 

<exp, String para VOZ N>, es una expresión String consistente en coman- 
dos musicales de una sola letra. Si no se especifica alguna de las 3 voces, el 
canal correspondiente permanecerá en silencio. 

Las notas musicales pueden especificarse de dos formas distintas: 



1°) Utilizando la notación alfabética convencional 
Las notas se representan mediante las letras A-G; 

FlGl Al 

f a | sol 1 ta j 



C 
do 



m 



E 
mi 



Para indicar un sostenido, colocaremos el símbolo # ó + a continua- 
ción de la nota. Por ejemplo Do sostenido se representará como 

C # ó C+. 

Para indicar un bemol, representaremos la nota con el simbolo — . Así 
D — será Re bemol. 

Unicamente pueden utilizarse tos sostenidos y bemoles que correspon- 
den a las teclas negran del piano, no siendo válidas las siguientes 
expresiones: 

• B # (Si sostenido) = C (Do) 

• C— (Do bemol) - B (Si) 

• E # (Mi sostenido} = F (Fa) 

• F— (Fa bemol) - E (Mi) 

Para indicar la octava correspondiente, utilizaremos el comando On 
(n = 1-8). 

Cada octava va de Do a Si (C — 8). Si no se específica octava, se 
entenderá 04. 



PLAYX DEFGA B" <— Escala natural 

PLAY "CC # DD # EFF # GQ # AA # B" *- Escala cromática 



10 REM$ ACOMPAÑAMIENTO ROCK $ 
20 A% = "T230O3EG#BO4C#DC#O3BG# " 
30 BS - , T230O3AO4C#EF#GF#EC#" 
40 C$= H"230O3BO4D#F#G#AG#F#D#" 
50 FOR I = 1 TO 2 : PLAY A S : NEXT 
60 PLAY B$ : PLAY A $ 
70 PLAY C $ : PLAY B $ 
80 GOTOSO 



T 230, indica la velocidad de ejecución (ver comando T) 

2 o ) Utilizando una notación numérica (Nn) 

En lugar de designar las notas con letras (A-G), lo hacemos mediante 
números: Nn (n = 0-96). Esta es una forma de seleccionar las notas sin 
tener que especificar nombre (A-G), octava ni alteraciones (sostenidos 
y bemoles). La octava 4 corresponderá a la siguiente numeración; 





NOTACION 


NOTACION 


NOTA 


NUMERICA 


ALFABETICA 


DO 


36 


C 


DO # 


37 


c # 


RE 


38 


D 


RE # 


39 


D# 


MI 


40 


E 


FA 


41 


F 


FA # 


42 


F# 


SOL 


43 


G 


SOL # 


45 


G # 


LA 


45 


A 


LA # 


46 


A# 


SI 


47 


B 



Cada octava está formada por 12 notas por lo que para calcular el número 
correspondiente a una nota en otra octava, tendremos que sumar/restar 12. 



Así por ejemplo, DO (Octava 4) = 36 (ver Tabla): 
DO (OctavaS) -36+12-48 
DO (Octava 3) = 36—12-24 



10 REM $ NOTACION NUMERICAS 

20 AS = "N36N37N38N39N40N41N42N43N44N45N46N47' 
30 PLAYAS 



COMANDOS MUSICALES 

Dentro de las expresiones anteriores, pueden utilizarse también los siguien- 
tes comandos: 

Ln : Duración de las notas (n - 1 - 64) 

La duración será 1/n 



Ln 


Duración 


L1 


1 


L2 


1/2 


L3 


1/3 


L4 


1/4 


L64 


1/64 



Si dentro de una expresión queremos variar la du- 
ración de una nota, lo haremos colocando el valor 
al lado de ésta. Así por ejemplo: Al 6 equivale a 
L16A, pero L16AB es distinto de A16B (debería 
ser A16B16), 

Rn Pausa (n = 1-64). Se utiliza para simular los "si- 
lencios''. La duración se calcula del mismo modo 
que para Ln, 

Punto. Realiza la operación del "puntillo" (la du- 
ración de la nota precedente se multiplica por 
3/2). Puede aplicarse también a la pausa (Rn). 

Ejemplo: G2. = GGG (duración de G = 2 x 3/2 
- 6/2 - 3). 

Tn Tiempo; velocidad de ejecución (n = 32 — 255) 
Si no se indica, se entenderá TI 20 . 

Vn Volumen: volúmen de salida (n - 0 — 1 5} 

Mn Modulación: período de la envolvente (n - 0 — 
65.535). 

Sn Forma: forma de la envolvente (n = 0-15): 





n 


Forma de la 
envolvente 




























\ 

\ 










1 H 


2, 3, 


9 


\ 

A 








4 r 


b, 


6. 7, 


15 


/ \ 

V i ^ 


*\ \\ w 
f \ | V i \ 
| V ' V i \ 


! \ 


■\ ' V i 

* \ ! 








a 


\< 

\ 

^ f 


\, \i \< 




\ \ \ \ \ 

1 \ | \ x 

H \ 










\ / 

Si 

\ 1- - 

\ 1 




V 










ii 


H 
A 


/; A A 

* / i 'I » M 


/ 1 * 
:/ 


1 /) A 

\ / 1 t ¡ 








12 


/ V 


Ir \ / \ / 

V f \t 


i/ 


i / i / i 
i' Y y 








13 


f 

i 

i 

i 

t 














14 


i 


tS 

r \ 

i... ,J* t.. ,J 
^ / \ / 
V \ f 


/ s 

\ 

\ 


A 



X <variable>: Ejecuta el String especificado. 

En todos estos comandos, el argumento n puede ser constante, 
como por ejemplo 17, ó variable. En tal caso, lo escribiremos de 
la forma; " = < variable >; " donde variable es el nombre de una 
variable (X por ejemplo). 

Ejemplo: Este programa, nos pedirá que le entremos el va- 
lor del período de la envolvente y nos ejecutará 
una pequeña melodía con las distintas formas de 
envolvente (ver Tabla II), 

10 INPUT "PERIODO:"; B 

20 A$ = T230Ü3EG#BO4C#DC#O3BG#" 

30 FOR A - 3TO 15 

40 PLAY "M=B;" : PLAY "S=A;" 

50 PLAY A$ 

60 l\l EXT 



ANEXO 3: INFORMACION TECNICA 



1. MAPA DE MEMORIA 

El Mapa de memoria de un ordenador MSX esta estructurado en cuatro 
bloques de 64K. denomindos SLOTS primarios", con lo que se dispone de 
un espacio físico en memoria de 256K. 

Cada uno de estos SLOTS puede ampliarse hasta un máximo de cuatro 
(SLOTS secundarios), disponiendo así de un espacio en memoria de 1 
Megabyte. (espacio físico total). 



SLOT 0 SLOT 1 SLOT 2 SLOT 3 























64 K 











































<úl$\ //^ 



El microprocesador Z80, tiene 16 bits de direccionamiento (BUS de direc- 
ciones), por lo que directamente sólo puede acceder a 64K. (2 16 =65.536- 
64K) Para permitir el acceso a todo el espacio de memoria disponible, cada 
SLOT se divide en cuatro páginas lógicas de 16K, y mediante el registro 
selector de SLOT (PORT A del Cl-8255). se transforma el espacio físico de 



memoria en un bloque lógico de 64K formado por páginas de 16K de los 
distintos SLOTS. De esta forma, la memoria física está siempre situada en el 
espacio de direccionamiento de la CPU. 



0000 

4000 

8000 

C000 

FFFF 



La ROM del BASIC MSX (BIOS + Interprete BASIC MSX), ocupa las páginas 
0 y 1 del SLOT 0, por io que la máxima memoria RAM direccíonable, 
trabajando en BASIC, es de 32KBytes. De estas 32KB. el sistema se reserva 4K 
para almacenamiento de variables y direccionamiento de los dispositivos de 
Entrada/Salida, quedando disponibles para el usuario 28,9KB. 

El BASIC MSX, utiliza la mayor área de RAM contigua disponible, instalada 
entre las páginas 2 y 3, por lo que si disponemos de un SLOT con una página 
de RAM y otro con dos (direccionables en BASIC), automáticamente, al 
inicializarse el Sistema, éste seleccionará como memoria RAM detrabajo la 
situada en las dos páginas contiguas, quedando la del otro SLOT inutili- 
zada. 

La selección de SLOTS para cada página, esta determinada por el conte- 
nido del reg istro selector de SLOT (PORT A del CI-8255). 



SLOÍ 



16K 



PAGINA 0 



PAGINA 1 



PAGINA 2 



PAGINA 3 



MSB 


K 


K 


Z 


z 


Y 


Y 


X 


x 






ji — 


1 


i . 


ii 





• Página 0, SLOT XX 

• Página 1, SLOT YY 

• Página 2 r SLOT ZZ 

• Página3, SLOT KK 



Con el valor de este registro, podemos hacer un esquema del Mapa de 
memoria en cada configuración: 



1°) HIT BIT 55 

• Registro selector de SLOT; 



00 


00 


00 


00 



PAG. 3 PAG. 2 PAG. 1 PAG O 
SLOT 0 SLOT 1 SLOT 2 SLOT 3 

PAG. 0 * BASIC 

PAG 1 * MSX 

PAG 2 PDB 
PAG. 3 * RAM 

2 o ) HIT BIT 55 + HBM 1 6 (conector posterior HIT BIT) 
• Registro selector de SLOT: 



00 


11 


00 


00 



PAG. 3 PAG. 2 PAG. 1 PAG O 









SLOT0 


SLOT 1 


SLOT 2 


SLOT 3 




PAG. 0 


* 


BASIC 
















PAG. 1 


+ 


MSX 
















PAG. 2 




PDB 










* 


RAM 




PAG. 3 


* 


RAM 















3 o ) HIT BIT 55 + HBM 1 6 (conector superior) 
• Registro selector de SLOT: 



PAG. 0 
PAG. 1 

PAG. 2 
PAG. 3 



00 


01 


00 


00 



SLOT 0 



PAG. 3 PAG. 2 PAG, 1 PAG. 0 
SLOT 1 SLOT 2 SLOT 3 




RAM 



4°) HIT BIT 55 + HBM 64 (conector posterior) 
• Registro selector de SLOT: 



SLOT0 



PAG 0 
PAG. 1 
PAG 2 
PAG. 3 




11 


11 


00 


00 



PAG. 3 PAG. 2 PAG. 1 PAG. 0 
SLOT 1 SLOT 2 SLOT 3 



RAM 



RAM 



RAM 



RAM 



5 o ) HIT BIT 55 + HBM 64 (conector superior) 
• Registro selector de SLOT: 



PAG.O 
PAG. 1 
PAG. 2 
PAG. 3 



01 



01 



00 



00 



SLOT0 




SLOT 1 


BASIC 




RAM 






RAM 


PDB 


* 


RAM 


RAM 




RAM 



PAG. 3 PAG. 2 PAG. 1 PAG. 0 
SLOT 2 SLOT 3 



6 o ) HIT BIT 75 

• Registro selector de SLOT: 



SLOT0 



10 


10 


00 


00 



PAG. 3 PAG. 2 PAG. 1 PAG.O 
SLOT 1 SLOT 2 SLOT 3 



PAG. 0 


* 


BASIC 








RAM 






PAG. 1 




MSX 








RAM 






PAG. 2 




PDB 








RAM 






PAG, 3 










* 


RAM 







70) HIT BIT 10P 

• Registro selector de SLOT: 



11 


11 


00 


00 



PAG, 3 PAG, 2 PAG. 1 PAG. 0 
SLOT 0 SLOT 1 SLOT 2 SLOT 3 



PAG. 0 


* 


BASIC 












RAM 


PAG. 1 


* 


MSX 












RAM 


PAG. 2 














f 


RAM 


PAG. 3 














* 


RAM 



8°) HIT BIT 20P 

• Registro selector de SLOT: 



11 


11 


00 


00 



PAG. 3 PAG. 2 PAG. 1 PAG.O 
SLOT 0 SLOT 1 SLOT 2 SLOT 3 



PAG. 0 


* 


BASIC 












RAM 


PAG 1 




MSX 












RAM 


PAG. 2 
















RAM 


PAG. 3 
















RAM 



MAPA DE MEMORIA 

I. Disposición general trabajando en BÁSIC-MSX: 
H 0000 



H 8000 

HC000 

HF 380 
H FFFF 



MSX BASIC 
ROM 
32 K 



Area 1 
Usuario 



Area 2 
Usuario 



Area del' sistema 



j 12,8 K 
j 3,2 K 



32 K 



16 K 



16 K 



64 K 



II. Area disponible por el usuario: 



H 8000 
(HC000) 



H 37 F 



Area de 
Programa 



Area de variables 



Area de arrays 



Area 
Libre 



Area de! stack 



Area de strings 



Bloque de control de Ficheros 



Con 64 K RAM — 28,8 K 
Con 16 K RAM — 1 2,8 K 



CONFIGURACION DEL AREA DE USUARIO 



Trabajando en BASIC, la RAM de usuario tiene la siguiente estructura: 



AREA DE 
PROGRAMA 



AREA DE 
VARIABLES 



AREA DE 
VARIABLES 
DE MATRIZ 



AREA 
LIBRE 



AREA DE 
STACK 



AREA DE 
VARIABLES 
ALFANUM ERICAS 



BLOQUE DE 
CONTROL DE 
FICHEROS 



1 Almacena programas BASIC. 



• Almacena datos numéricos aislados 

a variables y punteros de los datos 
alfanuméricos. 

• Almacena datos numéricos 

asignados a variables de matriz y 
punteros de los datos 
alfanuméricos. 

• Zona de memoria libre disponible. El 

tamaño de esta zona puede 
conocerse utilizando la 
función FRE, 

• Almacena las direcciones de retorno 

para los comandos de bifurcación. 
(FORNEXT, GOSUB .) 

• Almacena strings" (cadenas de 

caracteres) asignados a variables 
alfanum ericas. El tamaño de esta 
zona, puede ser definido por el 
usuario mediante el comando 
CLEAR. Inicialmente, se reservan 
200 Bytes para esta área. 

• Utilizado por los Ficheros de 

Entrada/Salida. El tamaño de este 
bloque, corresponde al número de 
Ficheros especificados en el 
comando MAXFILES. 



OBSERVACIONES 

• Normalmente, los SLOTS 0 y 2 son internos al sistema: 

— SLOTO, Página 0 y Página 1: BASIC MSX 

— SLOT 0, Página 2 : PERSONAL DATA BANK 

• La dirección de memoria FFFF de los SLOTS «prima- 
rios» contiene la situación del Registro de selección de 
SLOT «secundario». El valor real de este Registro es el 
complemento de su valor actual. 

• El símbolo indica las páginas direccionadas en BA- 
SIC, que corresponden a las indicadas en el Registro 
selector de SLOT. 

• Todos los ordenadores MSX disponen de 16K de memo- 
ria RAM de Video (VRAM), que se utiliza exclusivamente 
para la vísualización en pantalla, por lo que no se inclu- 
yen en el Mapa de Memoria. 

• EL Sistema Operativo de Disco, MSX,DOS requiere 64K 
de memoria de RAM. 



MAPA DE ENTRADA/SALIDA 
DIRECCION 
FF 



EO 
D8 

DO 



Area reservada 



Control ador 
Lector diskettes 



Area Reservada 



BO. 



A8 



A0 



98 



90 



88 



80 



00 



Interface 
Programable 
(PPI) 



Procesador 
de 
sonido 



Procesador 
de 
vídeo 



Impresora 



Area Reservada 



RS 232C 



Area Reservada 



L = LECTURA 
E=ESCRITURA 



Dirección 


L/E 


Aplicación 


OBSERVACIONES 


80 


L 


Lectura Datos 






E 


Ent. Datos 


INTERFACE 

RS 232C 


81 


L 


Estado 




E 


Est. Modo 




90 


L 


Lectura "Status" 
(B0) 






E 


SaJida "Strobe 
(B1) 


IMPRESORA 


91 


E 


Ent. Datos 




98 


L 


Lectura ciatos en 
Ram de video 






E 


Ent. datos en Ram , 
de video 


PROCESADOR 
DE 
VIDEO 
9928 


99 


L 


Estado 




E 


Establecimiento 
Mandatos/Direcc. 




Aü 


E 


Mantenimiento de 
Dirección 


PROCESADOR 
DE 
SONIDO 
AY-3-8910 


A1 


E 


Ent. datos 


A2 


L 


Lectura datos 


A8 


L 


Lectura datos 
Port A 






E 


Ent. datos Port A 




A9 


L 


Lectura datos 
PortB 


PPI 




E 


Ent. datos Port B 


8255 


AA 


L 


Lectura datos 
Port C 


I 
I 




E 


Ent. datos PortC 




AB 


E 


Est. Modo trabajo 


I 



DISTRIBUCION DE LOS PORTS DE E/S DEL PPI (8255) 



PORT 


BIT 


E/S 


SEÑAL 


APLICACION 


A 


0 


S 


CSOL 


Selección deSloten 




1 


S 


CSOH 


Página 0 




2 


S 


CS1L 


Selección de Slot en 




3 


S 


CS1H 


Página 1 




4 


S 


CS2L 


Selección de Slot en 




5 


s 


CS2H 


Pánina 9 

i ci vj nía l 




6 


s 


CS3L 


Selección de Slot en 




7 


s 


CS3H 


Página3 


B 


0 


E 














Teclado 




7 


E 






C 


0 


s 


KBO 






1 


s 


KB1 


Teclado 




2 


s 


KB2 






3 


s 


KB3 






4 


s 


GASON 


Control de cassette (0=ON) 




5 


s 


CASW 


Escritura cassette 




6 


s 


CAPS 


Lámpara Caps (0=ON) 




7 


s 


SOUND 


Salida de sonido (cuando 










está controlado por Soft) 



Página 0: 0000 -3FFF 
Página 1: 4000 -7FFF 
Página 2: 8000-BFFF 
Página 3: C0O0-FFFF 
E = Entrada 
S = Salida 



DISTRIBUCION DE LOS PORTS DE E/S DEL PROCESADOR DE SONIDO 



PORT 


BIT 


E/S 


APLICACION 


OBSERVACIONES 


A 


0 


E 


JS1 - PIN 1 1 
JS2-PIN1 *2 


Adelante 




1 


E 


JS1 - PIN 2 1 
JS2-PIN2 *2 


Atrás 




¿. 


b 


Jbl - PIN 3 1 
JS2-PIN3 *2 


Izquierda 




3 


E 


Jbl - PIN h 1 
JS2-PIN4 *2 


Derecha 




A 


E 
t 


IC i til M C H 

Jbl - PIN b 1 
JS2-PIN6 *2 


Botón de disparo 1 




5 


E 


JS1-PIN7 *1 

ICO DIM 7 .n 

Jb¿ - PIN 7 ¿ 


Botón de disparo 2 




O 




Selección caracteres 
del teclado 


Sólo versión Japonesa 




7 


E 


OSAR 


Lectura cassette 


B 


0 


S 


JS1-PIN6 *3 






1 


S 


JS1 - PIN 7 *3 






2 


s 


JS2-PIN6 *3 






J 


o 


ICO DIM 7 *n 

Jb¿ - PIN / j 






4 


s 


JS1 - PIN 7 






5 


s 


JS2-PIN8 






6 


s 


Selección entrada 
Port A 


Selección JS1/JS2 




7 


s 


Klamp (lámpara 
Kana) 


Sólo versión japonesa 



JOYSTICK 1 
JOVSTIGK2 
ENTRADA 
SALIDA 

ACTIVADO CUANDO EL BIT 6 DEL PORT B ES l 0' 
ACTIVADO CUANDO EL BIT 6 DEL PORT B ES "1" 
SI EL PORT B NO SE UTILIZA PARA SALIDA. ESTE BIT DEBE SER T 



2. PROCESADOR DE VIDEO (VDP) 

El ordenador incorpora el circuito integrado TMS 9928 A que actúa como 
procesador de imagen de video. Paralelamente va incorporada una memo- 
ria adicional de memoria RAM de 16 K, donde se almacena la información 
de las posiciones en la pantalla, junto con la definición de cada carácter. 

En cada tipo de pantalla la información queda almacenada en distintas 
partes de la memoria. Medíante las funciones "VPEEK" y "VPOKE" pode- 
mos examinar y alterar dichas posiciones 

La función BASE(N) se utiliza para leer o escribir una dirección base de la 
tabla del procesador de visualización (VDP). El contenido de los registros y 
la dirección base de la tabla del TMS 9928 A r que es el contenido de la 
pantalla, podrá modificarse directamente utilizando una variable BASE y 
una variable VDP, Es necesario conocer adecuadamente el TMS 9928 A ya 
que podría alterar la visualización normal de la pantalla. 

A continuación se detallan ios valores posibles de la función BASE según el 
tipo de pantalla utilizada. 



Valor de N 


Tabla 


0 


Tabla de nombres de patrones del modo de texto 
de 40 caracteres x 24 líneas. 


2 


Tabla del generador de patrones del modo de texto 
de 40 caracteres x 24 líneas. 


5 


Tabla de nombres de patrones del modo de texto 
de 32 caracteres x 24 líneas. 


6 


Tabla de colores del modo de texto de 
32 caracteres x 24 líneas. 


7 


Tabla del generador de patrones del modo de texto 
de 32 x 24 caracteres. 


8 


Tabla de atributos de figuras móviles del modo de 
texto de 32 x 24 caracteres. 


9 


Tabla de patrones de figura móvil del modo de 
texto de 32 x 24 caracteres. 


10 


Tabla de nombres de patrones del modo de 
gráficos de gran definición. 


11 


Tabla de colores del modo de gráficos de gran 
definición. 


12 


Tabla del generador de patrones del modo de 
gráficos de gran definición. 


13 


Tabla de atributos de figuras móviles del modo de 
gráficos de gran definición. 


14 


Tabla de patrones de figura móvil del modo de 
gráficos de gran definición. 


15 


Tabla de nombres de patrones del modo multicolor. 


17 


Tabla del generador de patrones del modo 
multicolor. 


18 


Tabla de atributos de figuras móviles del modo 
multicolor. 


19 


Tabla de patrones de figura móvi I dei modo 
multicolor. 



N = 1, 3, 4, y 16 no se utilizan. 



En cada tipo de pantalla (SCREEN) se manejan una serie de tablas cuyos 
detalles se especifican a continuación. 



SCREEN 0 

SCREEN 0 sólo puede contener caracteres (Máximo: 40 x 24); un color de 
pantalla; no es posible utilizar SPRITES y el color de los bordes es el de 
fondo. 

La pantalla queda dividida en 40 líneas verticales y 24 lineas horizontales, 
por lo que disponemos de 960 posiciones. 

Existen dos tablas para el manejo y almacenamiento de los caracteres, La 
tabla NOMBRE contiene el código de carácter de cada posición de pantalla. 
La tabla PATRON contiene el diseño de los diferentes caracteres. Cada 
posición de la tabla NOMBRE tiene reservados 8 octetos de la tabla PATRON. 



El inicio de la tabla NOMBRE viene dado por la variable BASE (0) y el de la 
tabla PATRON por BASE (2), 

Imaginemos que en la primera línea de la pantalla tenemos la palabra 
SONY; 



PANTALLA TABLA NOMBRE TABLA PATRON 




959 J | 

2047 1 I 



La primera posición de la pantalla es la letra S cuyo código ASCH (83) está 
reflejado en la primera posición de la tabla NOMBRE, Este mismo código 
(83), multiplicado por ocho, da la primera posición de la tabla PATRON, 
donde se encuentra reflejada la forma de este carácter. La estructura de 
este carácter se encuentra en las 8 posiciones consecutivas de la tabla 
PATRON (664-671). 



EJEMPLO 



Si ejecuta el siguiente ejemplo podrá comprobar el contenido de la tabla 
PATRON : 



10, SCREEN 0: WIDTH 40: DS=STRING$ (8, l< 0' ) 

20 PRINT^SONY 1 ' 

30 FORK=0TO3 

40 1= VPEEK{BASE(0) + K) 

50 Y- 1 *8: Z= Y + 8: J=J + 9: T=0 

60 FORX-YTOZ-1 

70 LOCATE J-5.7+T 

80 PRINT RIGHT$ {D$+ BIN$ (VPEEK (BASE (2) + X)), 8) 
90 T=T + 1 
100 NEXT X, K 



SCREEN 1 

En SCREEN 1 cada 8 caracteres pueden presentarse en diferente color; 
puede manejar SPRITES; el máximo número de caracteres es de 32 x 24. 

La pantalla queda dividida en 32 líneas verticales y 24 horizontales, por lo 
que disponemos de 768 posiciones. 

En este caso se manejan tres tablas en la memoria RAM de video. La tabla 
NOMBRE y PATRON funcionan de forma similar a la descrita en SCREEN 0. 
La tercera tabla, tabla COLOR, es la correspondiente al color de cada 
carácter y de su fondo de la tabla NOMBRE. 

El inicio de la tabla NOMBRE viene determinado por la variable BASE (5), la 
tabla PATRON por BASE (7) y la de color por BASE (6). 





TABLA COLOR 

o f Ts T 4 



31 



Los colores de fondo y de los caracteres se pueden modificar independien- 
temente con la sentencia COLOR. Además pueden presentarse diferentes 
colores a la vez. 

BASE (6) indica el principio de la tabla COLOR de 32 bytes. Cada byte está 
dividido en dos cuartetos. El primer cuarteto indica el color de los ocho 
primeros caracteres consecutivos de la pantalla y el segundo cuarteto el 
color de fondo. 



SCREEN 2 

En SCREEN 2 pueden presentarse gráficos de alta resolución y SPRITES; 
texto en pantalla gráfica; 256 x 192 puntos de resolución y cada 8 puntos 
tiene su propio color de frente y fondo, 

La pantalia queda dividida en 24 lineas horizontales y 32 verticales confi- 
gurando un total de 768 posiciones de pantalla. Cada posición está subdivi- 
dida en una malla de 8x8 puntos. 

Se conserva el número de tablas, aunque varía su longitud. La tabla NOM- 
BRE contiene el código de carácter de cada posición correlativa de la 
pantalla. 

El código de carácter que figura en la tabla NOMBRE señala la posición del 
tipo y color del carácter en la tabla PATRON y tabla COLOR, respectiva- 
mente. 



Cada carácter de la tabla NOMBRE está constituido por una matriz de 8 x 8 
puntos en la tabla PATRON. Por lo tanto la tabla PATRON estará compuesta 
de 768 posiciones de 8 bytes, resultando 6144 bytes. 

Para cada posición de la tabla PATRON existe el color correspondiente del 
carácter y de su fondo en la tabla COLOR. 



PANTALLA 



orr 



256 



736 



31 



5 I 1 



767 



TABLA NOMBRE 


TABLA PATRON 


0 




0 








2048 




256 


1 












2056 




511 






2063 










4096 




767 






6143' 





TABLA COLOR 



0 

2048 
2056 
2063 

4096 
6143 



El inicio de la tabla NOMBRE viene determinado por la variable BASE ( 10), la 
tabla PATRON por BASE (1 2) y la tabla COLOR por BASE (1 1 ). 



SCREEN 3 

En SCREEN 3 pueden presentarse gráficos de baja resolución y texto en 
pantalla gráfica en modo multicolor. 




Este modo proporciona una definición de 64 x 48 bloques de color. Cada 
bloque contiene 4x4 puntos. El color de cada uno de los cuatro puntos 



puede ser uno de los 16 colores existentes. Consecuentemente, todos los 
colores pueden ser usados simultáneamente en el modo SCREEN 3. Los 
planos SPRITES están permitidos en este modo. 

En este tipo de pantalla existen dos tablas lü tabla NOMBRE es la misma 
que para SCREEN 2, consistiendo en 768 posiciones. El color está ahora 
definido en la tabla PATRON. El código de carácter de la tabla NOMBRE 
señala un segmento de 8 bytes de VRAM en la tabla PATRON. 

Sólo 2 bytes de los 8 que forman el segmento son usados para especificar la 
imagen de pantalla. Estos 2 bytes especifican 4 colores y cada color ocupa 
un área de 4 x 4 puntos. Los cuatro primeros bits (MSB) del primer byte 
definen eí color del bloque izquierdo superior del patrón multicolor; los 4 
bits restantes definen el color del bloque superior derecho. El segundo 
bytes define, de forma parecida, el J bloque inferior izquierdo y derecho del 
patrón multicolor. Los 2 bytes crean un mapa de 8 x 8 puntos de patrón 
mufticolor. 



color A ^color B 
color C j color D 



2 Bytesde la Tabla 
Generador de Patrón 



PATRON MULTICOLOR 
h — 8 puntos — *-| 



T 

8 

puntos I j_ 



i 



I B 
S 



\ 



La posición de fos 2 bytes dentro del segmento de 8 bytes señalado por el 
código de carácter de fa tabla NOMBRE depende de la posición que apa- 
rece el carácter en la pantalla. Para nombres en fa fila superior (fila 0), los 2 
bytes son los 2 primeros dentro de los grupos de segmentos de 8 bytes 
señalados por el código de carácter de la tabla NOMBRE. La siguiente fila 
de caracteres (fila 1) utiliza los bytes 3 y 4 de los segmentos de 8 bytes. La 
siguiente fila utiliza los bytes 5 y 6 mientras que la última fi la utiliza los bytes 
7 y 8. Esta serie se repite para el resto de pantalla. 



TABLA NOMBHfc 



T ABLA PATRON 



767 




A 


B 


c 


D 









F 


-H 







Pifa I 



Fila 2 





M 


U 


0 


P 



FHíi 3 



Byles seña lados por 
tabla NOMBRE 





B 


c 


U 


F 


I 1 


G 


H 


r 


J 


K 


L 


M 


N 


O 


P 



Cuando se utiliza este modo, 768 byíes son utilizados por la tabla NOMBRE 
y 1536 bytes son usados para la información de color en la tabla PATRON 
(24 filas x 32 columnas x 8 bytes/posición patrón). 



3. CONECTORES 

1. CASSETTE: 



PIN 



SEÑAL 



E/S 



CONECTOR 



1 
2 
3 
4 
5 
6 
7 
8 



MASA 
MASA 
MASA 
SALIDA 
ENTRADA 
REMOTO + 
REMOTO — 
MASA 



S 
E 
S 
S 




■ E - ENTRAC 

■aSP S = SALIDA 



2. AUDIO/VIDEO 



PIN 






CONECTOR 


1 


+ 12V 


— 




2 


MASA 






3 


+ 12V 






4 


VIDEO 


s 




5 


AUDIO 


s 


6 


AUDIO 


s 





3. JOYSTICK 



PIN 


SEÑAL 


E/s' 


CONECTOR 


1 


ADELANTE 


E 




2 


ATRAS 


E 




3 


IZQUIERDA 


E 




4 


DERECHA 


E 


I CD $ Q> $ $ J 


5 


+ 5V. 






6 


B. DISPARO 1 


E/S 


\ é é é i / 


7 


B. DISPARO 2 


S 




8 


SALIDA 


S 




9 


MASA 







4. IMPRESORA: 



PIN 



SEÑAL 



PIN 



SEÑAL 



CONECTOR 



1 


PSTB 


2 


DATOO 


3 


DATO 1 


4 


DATO 2 


5 


DATO 3 


6 


DATO 4 


7 


DATO 5 



8 


DATO 6 


9 


DATO 7 


10 


SINCONEX. 


11 


BUSY 


12 


SIN CON EX. 


13 


SIN CONEX, 


14 


MASA 




5. CARTUCHO: 



Pin 49 



Pin 50 



PIN 


SEÑAL 


E/S 




PIN 


SEÑAL 


E/S 


1 


CS1 


S 




2 


CS2 


S 


3 


CS12 


S 




4 


SLTSL 


S 


5 


Reservado 


— 




6 


RFSH 


S 


7 


WAIT 


E 




8 


INT 


E 


9 


M1 


S 




10 


BUSDIR 


E 


11 


IORQ 


S 




12 


MERQ 


S 


13 


WR 


s 




14 


RD 


S 


15 


RESET 


s 




16 


Reservado 


— 


17 


A9 


s 




18 


A15 


S 


19 


A11 


s 




20 


¡ A10 


s 


21 


A7 


s 




22 


A6 


c 

o 


23 


A12 


s 




24 


A8 


s 


25 


A14 


s 




26 


A13 


s 


27 


A1 


s 




28 


A0 


s 


29 


A3 


s 




30 


A2 


s 


31 


A5 


s 




32 


A4 


s 


33 


D1 


E/S 




34 


DO 


E/S 


35 


D3 


E/S 




36 


D2 


E/S 


37 


D5 


E/S 




38 


D4 


E/S 


39 


D7 


E/S 




40 


D6 


E/S 


41 


Masa 






42 


Reloj 


s 


43 


Masa 






44 


SW1 




45 


+ 5V 






46 


SW2 




47 


+ 5V 






48 


+ 12V 




49 


SOUNDIN 


E 




50 


— 12V 





PIN 



NOMBRE 



CONTENIDO 



1 

2 
3 

4 

5 
6 
7 
8 
9 
10 



CS1 
CS2 
CS 12 

SLTSL 

Reservado 

RFSH 

WAiT 

INT 

M1 

BUSDIR 



11 




IORQ 


12 




MERO 


13 




WR 


14 




RD 


15 




RESET 


16 




RESERVADO 


17 


32 


AO A15 


33 


40 


DO D7 


41 




MASA 


42 




RELOJ 


43 




MASA 


44. 


46 


SW1.SW2 


45. 


47 


\ 5V 


48 




f 12 V 


49 




SOUNDIN 


50 




- 12V 



Señal de selección de direcciones ROM 4000/7 FFF 

Señal de selección de direcciones ROM 8000/ BFFF 

Señal de selección de direcciones ROM 4000/BFFF 

(para 256 K ROM) 

Señal de selección de SLOT 

Linea de señal reservada (uso inhibido) 

Ciclo de señal de refresco 

Señal de requerimiento de espera de la GPU 

Señal de requerimiento de interrupción de la CPU 

Señal de ciclo de fetch de CPU 

Esta señal controla de dirección de buffer del bus 

de datos externos Los cartuchos son 

seleccionados y el niel "L" es sacado de cada 

cartucho en el momento de transmisión de datos 

Señal de requerimiento E/S 

Señal de requerimiento de memoria. 

Señal tiempo escritura 

Señal de tiempo de lectura 

Señal ele RESET del sistema. 

Linea de señal reservada (uso inhibido) 

Señales del bus de direcciones. 

Señales del bus de datos 

Señal de Masa. 

Reloj CPU 3,58 MHZ. 

Señal de Masa. 

Para protección de Inserción/Ordenación. 
Tensión i 5V. 
Tensión + 12V. 

Serial de entrada de sonido (- 5 dbmj, 
Tensión 12 V. 



6. RGB: 



PIN 


SEÑAL 


PIN 


SEÑAL 


CONECTOR 


1 


SAL. AUDIO D 


12 






A 2 


ENT. AUDIO D 


13 


MASA 




3 


SAL. AUDIO I 


14 






4 


MASA 


15 


COLOR ROJO. 




5 


MASA 


16 


ESLANKING 


[czr— r-f 

l\DOCOC}&ODDfl 


A 6 


ENT. AUDIO I 


17 


MASA 


\§l_ , — lj 


7 


COLOR AZUL 


18 


MASA 




8 




19 


SAL. VIDEO 




9 


MASA 


20 






10 




21 






11 


COLOR VERDE 









2o mu. j» t?±" * fi u * ^ ■ £^ ( 

Jl*í J f fe fi» 51 1 H h S á 

m a, 

s A 

i 5 



ANEXO 4: PROGRAMAS 



PROGRAMA DEMOSTRACION DE LOS COMANDOS GRAFICOS 
UTILIZADOS EN EL BASIC MSX 



1 RFItf ** CONANDOS GRAFICOS *# 
10 COLOR 15.1,1 

15 ALTA RESOLUCION ~~> SCREEN 2 

20 SCREEM 2 

25 PUNTO 

30 P9ETC32 P -32D, 15 

35 ' LINEA *** 

40 LINEC76, 32] -ti 16, 32 D p 6 

45 RECTANGULO X*X 

50 LINEC 135, 52D. 12,6 

55 *m* PINTAR UN RECTANGULO *** 

60 LINEC204, 12] -C244, 52] ,8. BF 

65 CIRCULO XXX 

70 CIRCLEf 32, 96] , 20 P 5 

75 PINTAR UN CIRCULO *** 

80 C1RCLEC96>96].20.4 

90 PAINTC96. 96] B 4 

35 ELIPSE HORIZONTAL *** 

100 CERCLEC160,96],20, 15, , .,5 

im '***PINTAR UNA ELIPSE HORI^ONTrL*** 

110 CIRCLEC224.96] .20, 13. > , . 5 

120 PAINTf22 , n > 96] . 13 

125 ELIPSE UERTICAL *** 

130 C I RCL E f 32 > 160] , 20, 2, . . 2 



I - 



135 PINTAR UNA* ELIPSE UERTICAL 

140 CIRCLEC36, 160] , 20, 1 1 , , , 2 

158 PAINTC36, 1603 , 1 1 

155 ? *** MACRO LENGUAJE GRAFICO #** 

160 DRAW"c2bml40, 160 r 1 0e 20f 5 r 1 0e 1 0f 5e 1 0 
r5e5f 10r5f 10" 

170 GOTO 1 70 



PROGRAMA DE GRAFICOS: SIMULACION REBOTES 
DE UNA PELOTA 



10 '**REBOTES DE UNA PELOTA** 
20 SCREEN 2,0: COLOR 15,1,1 

30 CLS : A^RNDC -TINE3 :T=lNTCRNDC 1 - O 

PEN"GRP : "TOR DUTPUT AS# 1 : PRESET £ 70 , 1 2 3 : C 

OLOR T : PRI NT# 1 , "REBOTES DE UNA PELOTA" 

40 X=10:Y=10 :U-0:C=0 

50 CIRCLECX,Y3>5.C, , ,1.2 

60 ON I NTERUAL-5 GOSUB 100 

70 I NTERUAL ON 

80 IF X<256 THEN 83 

90 INTERUAL OFF : GLOSE : GOTO 30 

100 C I RC LE t X , Y ] , 5 , T , , ."1.2 

1 10 U = U+A 

120 X~X+5:Y=Y+U 

130 IF v>i80 THEN Y - 1 S0*2-Y g -U* . 8 ! BEEP 

140 CIRCLECX, Yl, 5,T 
150 RETURN 



PROGRAMA DE GRAFICOS: CUADROS ABSTRACTOS 



10 REM *** CUADROS ABSTRACTOS *** 
20 SCREEN 2:COLOR 15,1,1:CLS 
22 A=:RNDC-TIF1E} 
25 FOR 1 = 1 TO 75 



27 OINTf RNDt 1 3*143+2 

30 XI -- INTÍRNDC 1 3*255 3 

40 Y'1-INTCRNDC 1 3*1923 

50 X2=INTrRNDC 13*255 3 

60 Y2- INTfRNDC 1 3*192] 

70 LINECX1 „ Yl 3 -CX2, Y23 ,C, BF 

80 NEXT 

90 FOR 1 = 1 TO 2000 :NEXT :GOTÜ 20 



PROGRAMA DE GRAFICOS: CIRCULOS DE COLORES 



10 COLOR 15,1,1 

20 SCREEN2:A=RNDC-TIME3 

30 FOR X-0 TO 2*3.14159 STEP . 104?19666# 

40 GIROLE C 124+40*COSCX3, 1 06+40*S T N C X 3 3 , 2 
0, INTCRNDC 13*153 + 1, . , 1 
50 NEXT 
60 GOTO 60 



PROGRAMA DE GRAFICOS: FLORES 



10 ^** GRAFICOS ALEATORIOS ** 

20 COLOR 15,1,1: SCREEM 2 : A = RND i -T I riE 3 ! 

30 R1=5:R2=20:Z=3. 14/180 

40 X0-INTC256*RNDC 1 3 3 S Y0= T NT f 1 32*RíND C 1 .3 3 

:C=TNT C 1 4*RND C 13 3+2 

50 FOR T=0 TO 360 STEP 20 

60 S^T*? 

?B Y--SINCS3 :X=COSt S3 

80 LINECRI*X+X0, Rl *Y + Y0 3 - f R2*X+X0 , R2*Y+Y 
03, C 

90 NEXT T 
100 GOTO 40 



PROGRAMA DE GRAFICOS: DIBUJO DE CIRCULOS DE COLORES 
ALEATORIOS EN FORMA SENOIDAL 



5 GRAFICOS ALEATORIOS *** 

10 COLOR 15,1,1 

20 SCREEN2:C=2:A=RNDC-TIMED 

30 POR X-0 TO 6.28 STEP. 1 57 

40 COLOR CíOOlUF C=16 THEN C = 2 

50 Y-S INC X 3 *S0 + 36 INTCRNDC 1 3*96 3 

60 2-CÜ5CX+C3: 1415/23 3*88+96 

70 CIRCLECX*39+20, V), 12, , . , . 5 S PLAY r ' N= A 5 

80 CIRCLE f X*30 + 20 , Z 3 . 12, , , , . 5 

32 NEXT 

100 GOTO 30 



PROGRAMA DE GRAFICOS: 'ESTRELLAS 1 



10 REP1 $ GRAFICOS :PSET $ 
20 REH 5 CIELO ESTRELLADO 1 

30 A^RNDC-T tHEJ :C0LOR 1 5 , K 1 : SCREEN 2,1 = 

^OR 1=0 TO 200 

40 X=INTCRNDC 1 .1*2551 + 1 

50 Y= INTCRNDC 13*1923+1 

60 PSETCX. y] , INTCRNDC 1 3*143*2 

70 NEXT I 

80 FOR 1=1 TO 2000 -NEXT I 

90 SPRITE$C03=CHR$C&B00000000 3+CHR$í.&B00 
000000 1 +CHR*[&B00 100 100 3 +CHRSC&B001 1 1 100 
3+CHR$C&B0101 10103+CHR$CS,B1001 100 11 +-CHRS 
C&B01 1 1 1 1 10]+CHR$f ^600100100 3 
100 PUT SPRITE 0,C120,903 

110 FOR Q-l TO 200 =X=INTf RNDC 1 3#203*t~l .1 

:Y= INTCRNDC 1 )*283#OÍ l^X 
120 PUT SPRITE 0, STEPCX. Y 1» 5 :BEEP 
130 FOR T=.l TO 70:NEX~r 

140 NEXT Q : FOR 1 = 1 TO 2000 S NEXT : CLS : GOTO 
30 



PROGRAMA DEMOSTRACION DE GRAFICOS, t. 



10 REM GRAFICOS **** 

20 9 INICIALIZACION 

30 XCM28 :vc^6 

40 R^8 

50 SP=6 

60 RATI 0=1 , 5 

70 RX-n 

80 r -1 

30 Pt»3* 14153 :FLPG=1 

100 XB-0 :VB=-0 :XE-@ : YE = 0 ! XM=0 : YM=0 

110 DTn X f 6 i ¥ v r 6 1 a r 6 ^ 

120 Al :-:'.HLl^-o^ 1 .^^^[3]^-lb.H,4j 

¡=0:AC53~~13 

130 FDR NO-^0 TO 5 

140 ACNQ3=ACN0 V180*PI 

150 NEXT NO 

160 C = 2 

170 ' PROGRAMA PRINCIPAL 

180 SCREEN 2:C0L0R 7. 1 , 1 :CLS 

190 UUJ = 0:EOR ANGLE^0 TO 360 STEP SP 

200 UU=UU+1 :C = 5 

210 AG=ANGLE/180*PI 

220 RB -R 

230 POR NQ=0 TO 5 

240 XCN0 3=RB*RATIO*COSCAG+ACN0 3 3*RX 

250 YCN05=RB*RATI0*S1NCAG+ACN0:) 3#RY 

260 RB = RB-*RAT10 

270 NEXT NO 

280 POR NO=0 TO 4 

290 LINECXCNCn+XC P YCNOD+YCD- CXC NO+1 1+XC, 
YCNG+13+YC) , C 
300 NEXT NO 

310 IF XBO0 AND FLAG=-1 THEN LINECXB+XC 

„ YB+YCJ-CXC03+XC P YC03+YCD X 

320 IF XEO0 AND FLAG = -1 THEN LINECXE+XC 

p YE+YC ]-CXC5}+XC,Yt5D +YC 3 , C 

330 IF XHO0 AND FLAG=-1 THEN PAINTCCXn+ 

XC43+XC*23/2, CYn+YC4]-+YC*23/2 3 , C 

340 XB=XC03 :YB=YC0] 

350 XE=X£5D :YE=YC5] 

360 XM=XC4) :YM^YC4] 



370 FLGG=-FLAG 

380 if m-í mm 390 else uu-a 

390 NEXT ANGLE 

400 POR 1 = 1 TO 5000:NEXT I : CLE AR S CLS ¡ GOT 

0 10 



PROGRAMA DEMOSTRACION DE GRAFICOS, 2, 



10 REM **** GRAFICOS **** 

20 ' INICIAL 12 ACION 

30 Din Rf 9] , SC93 

40 XS=3 

50 XF=2 

60 YU=50 

.70 RC 11 =48 :RC23 = 10:RC3D=5:RC4]=5:RC51=5: 

RC63=5 ¡RC7 3M0 :RC83=48 :RC03=0 :SC0D=0 

80 FOR NO=l TO 8 

30 SCNO]=SCNO-l l+RCMOD 

100 NEXT NO 

110 PI»3. 14153 

120 'PROGRAMA PRINCIPAL 

130 SCREEN 2:C0L0R 8, l,i:CLS 

140 FOR X=36 TO 222 STEP XS 

150 Y = Ytd*SINCXF*X/180*Pn 

160 FOR NO=Í TO 7 STEP 2 

170 CIRCLECX-RCN0]*C0Sf.PI/41 i CSCNO-1 ]*2 + 
RCN013*SINCPI^4D+Y3„ RCN03 , , P 1*7/4 p P] /4 
180 CIRCLEf X+RCNO+1 l*C0SCPI/4] . CSC NO 3*2+ 
RCNO+1 )3^SINCFI/43+Y3 , RCNO+1 3 , t P 1*3/4, PI 
#5/4 

190 NEXT NO 
200 NEXT X 

210 FOR 1 = 1 TO 5000:NEXT I :CL.EAR : CL S :G0T 
O 20 



PROGRAMA DE GRAFICOS; SPRITES 1 
MOVIMIENTO DEL CAÑON — CURSORES 
DISPAROS — BARRA DE ESPACIO 

5 SCREEN 1..0JKEY OFF : COLOR 15, 4, 4 : A-RNDC 
T 1 HE 3 

20 FÜR 1=0 TO 2 
30 GOSUB 3010 
40 SPRITE*Í 1 )=SP* 
50 NEXT I 

70 ON STRIG GOSUB 1 0 1 0 S STR I G f 0 3 ON 

80 ON SPRÍTE GOSUB 2010 

30 X0=0 :Y0^30 :X1 = 120 :Y1M79 

100 PUT SPRITE 1, CXKY13, 15*1 

120 ON CST1CKC03-+-2D/4 GOSUB 200,300 

130 X0=X0+INT*CRNDC 1 3*5+13 

140 Y0=Y0+INTCRNOt 1 )*11 -53 

150 PUT SPRITE 0, CX0,Y03, 15,0 

160 GOTO 100 

200 Xl=Xl+2 :RETURN 

300 X1--X1-2 í RETURN 

1010 SOUND 6,Í5:S0UND 7,7 

1020 SOUND 8,16:SDUND 9,16 

1030 SOUND 10,16:SOUMD 11,0 

1040 SOUND 12,10:SOUND 13,1 

1050 STR I G C 0 3 0N:SPR1TE ON 

1060 X2=X1 

1070 FOR Y2=Yl-8 tq -8 STEP -1 
1080 PUT SPRITE2, C X2 , Y2 3 , 15,2 
1090 NEXT Y2 
1 100 RETURN 

2010 SOUND 0,65=SOUND 1,15 

2020 SOUND 2,97:S0UND 3,15 

2030 SOUND 4,162:S0UND 5,15 

2040 SOUND 6,15:SÜUND 7,21 

2050 SOUND 8,3l:S0UND 9,31 

2060 SOUND 10,31 :SOUND 11,228 

2070 SOUND 12, 37 :SOUND 13,1 

2080 PUT SPR1TE0, CX0, Y03 , 8, 0 

2090 LOCATE 10, 1 2 : PR I NT 11 GAHE OUER' 



2100 FOR 1 = 1 TO 1000 :NEXT :RFSTORE :SPRITE 



OFF 


:CLEAR:GOTO 5 


3010 


SP$ = 




3020 


FOR 


J=l TO 8 


3030 


READ 


US 


3040 




SP$+CHR*Í UALf ,I S,B"+D*n .1 


3050 


next 


J 


3060 


RETURM 


4010 


DATA 


0001 1 000 . 


4020 


DATA 


001 1 1 100 


4030 


DATA 


0UÍU10 


4040 


DATA 


11011011 


4050 


DATA 


11011011 


4060 


DATA 


un III 1 




DATA 


00100100 


¿f080 


DATA 


01 00001 0 


4100 


DATA 


00010000 


4110 


DATA 


001 1 1 000 


4120 


DATA 


001 1 1000 


4130 


DATA 


0111 1 100 


4140 


DATA 


1 1 111 i 11 


4 150 


DATA 


10101010 


4160 


DATA 


11111110 


4170 


DATA 


1 10001 10 


41S0 


DATA 


00010000 


4200 


DATA 


00010000 


4210 


DATA 


00000000 


4220 


DATA 


00000000 


4230 


DATA 


00000000 


4240 


DATA 


00000000 


4250 


DATA 


00000000 


4260 


DATA 


00000000 



c 



PROGRAMA DE MUSICA: ORGANO MUSICAL 



10 REH **** ORGANO MUSICAL **** 



DO-SI COCTAUA 23 

DO COCTAUA 33 

DO-S I C OCTAUA 4] 

DO COCTAUA 5] 

DO-SICOCTAUA 63 

DO COCTAUA 73 
100 ' =================================== 

110 ' 

120 SCREEN 2 :CLS : COLOR 8,1.1 
130 OPEN"GRP : "EOR OUTPUT AS #1 
140 A$="U20R20D20L20" 
150 FOR X=20 TO 190 STEP 25 
160 PRESETf X, 40] ¡DRftU " C5XAÍ ; " 
170 NEXT 

180 PRESETC20. 703 :DRAU " C5XA* : " 

199 FOR X=20 TO 190 STEP 25 

200 PRESETCX, 1003 :DRAW "C5XA*:" 
210 NEXT 

220 PRESET C 20 , 130 3 :DRAW"C5XA* : " 
230 FOR X=20 TO 190 STEP 25 
240 PRESET CX, 1603 :DRAW " C5XA* ;" 
250 NEXT 

260 PRESET C 20, 190 3 :DRAW"C5XA* ; " 
270 FOR X=27 TO 130 STEP 25 
280 READ A* 

230 PRESETCX, 273 :PRINT#1 , A$ 
300 NEXT 

310 PRESET [ 27 . 57 3 :READ A* :PR I NTtt 1 . A* 
320 FOR X=27 TO 190 STEP 25 
330 RFAO A$ 





20 




3(3 








40 




50 




60 




78 




80 








90 



TECLAS QUERTYU 

. I --> 
. ASDFGHJ --> 
. K --> 
, 2XCUBNM — > 
. . CCONA3 — > 



340 PRESETEX, 87} :PRINT#1 , A$ 
350 NEXT 

360 PRESETE27, 1 17} :READ A* = p R I NTtt 1 , AS 
370 FOR X = 27 TO 190 STEP 25 
380 READ A* 

390 PRESETE X. 147} :PRINT#1 , A$ 
400 NEXT 

410 PRESETE 27,, 1773 i READ A* :PRINT# 1 , A* 
420 COLOR 14 

430 FOR X=23 TO 185 STEP 25 
440 READ A* 

450 PRESETCX, 83 :PRINT#1 , A* 
460 NEXT 

470 PRESETE 200, 8} :PRINT#1 , "OCTAUA" 
480 COLOR 8 

490 FOR Y=27 TO 177 STEP 30 

500 PRESETE 210, V} :READ A: p RINT#l,A 

510 NEXT 

520 PRESET E 50, 57 } : COLOR 2:PRINT#1." ORGA 
NO MUSICAL" 

530 PRESETE70, 1 171 :PRINT#1 , " H 
540 GOSUB 900 
550 PLAY"L15U15" 



560 


A* 


- I NKE Y$ 


íif m 


= ,: " SOTO 


570 


IF 


A*= 


" Q" 


THEN 


PLAV" 


02C" 


580 


ir 


A$ = 


"U ,! 


THEN 


PLAV" 


02D" 


590 


I F 


A*= 


" E " 


THEN 


PLAY" 


02E" 


600 


IF 


A* = 


"R" 


THEN 


PLAY" 


02F" 


610 


IF 


A* = 


" J " 


THEN 


PLAY " 


02G" 


620 


IF 


A$ = 


"Y" 


THEN 


PLAY " 


02A" 


630 


IF 


A*= 


"U" 


THEN 


PLAY " 


02B" 


640 


IF 


A*= 


" I " 


THEN 


PLAY"03C" 


650 


IF 


A$= 


"A" 


THEN 


PLAY" 


04C" 


660 


IF 


A*= 


"S" 


THEN 


PLAY" 


04D" 


670 


IF 


A*= 


"D" 


THEN 


PLAY" 


04E" 


680 


IF 


A*= 


" F " 


THEN 


PLAY"04F" 


690 


IF 


A* = 


" G " 


THEN 


PLAY" 


04G" 


700 


IF 


A$= 


" H " 


THEN 


PLAY " 


04A" 


710 


IF 


A*= 




THEN 


PLAY" 


04B" 


720 


If 7 


A$= 


" K " 


THEN 


PLAY " 


05C" 


730 


IF 


A$ = 


"2" 


THEN 


PLAY " 


06C" 


740 


IF 


A$ = 


"X" 


THEN 


PLAY" 


06D" 


750 


IF 


A$ = 


"C" 


THEN 


PLAY" 


06E" 


?60 


IF 


A*= 


"U" 


THEN 


PLAY " 


06F" 



770 IF A*-"B" THEN PLAY"06G" 

780 IF A*="N" THEN PLAY"06A" 

790 IF A*="M" THEN PLAY"06B" 

800 IF A$="," THEN PLAY"07C" 

810 GOTO 560 

820 DATA Q, U, E, R, T, Y, U 

830 DATA I 

840 DATA A,S,D,F,G,H,J 

850 DATA K 

860 DATA Z.X.C.U.B.N.M 
870 DATA " , ■ 

880 DATA DO, RE, NI , FA. SOL, LA, SI 
890 DATA 1 ,2,3.4,5,6 

900 REfl **** HUSICA INICIAL #*** 
910 ' 

920 A$= " L806C4 . ECEG 1 6L64CFAL807C06BAGG5 . 
. 05L64GB06DL8GFD05BGB06DFECAGG4 " 
930 B$="05L8CGEG" 
940 C*="05CAFA" 
O 950 D*="04G05FDF" 

960 F*=B$+B*+C*+B*+D*+D*+B$+B* 

970 '!'$=■" L806C4 . ECEG 1 6L64CFAL807C06BAGG5. 

. 05L.64GB06OL8GFDD5BGB06D05B06CO5G06ECC2" 

980 G$=B$+B$+C$+B$+D*+D*+B*+B* 

990 PLAY"S1N3000T120". " S8N500T 1 20 11 : PLAY 

A$,F*:PLAY T$,G$ 

1000 RETURN 



PROGRAMA DE MUSICA: HIMNO 



.10 REM PROGRAMA MUSICAL 

20 RED H I P1 N 0 

30 COLOR 4, 14, 14 :CLS :GOSUB 1 00 : CLEAR : PLA 
Y "VI 2" , "U12" . "U12" 

40 U 1 " T 1 08O6L 4CCD05G . 06C8DEEFE . D8CE808 
CD5G06C. D8E8F8GGGG. F8EFFFF . E8DEL8FEDCL4E 
. P 8GL 1 2AGFL4EDCR4R4 R20" 

50 U2$= " T i 08O5L4EGAD . G8GGAAGBAFEDE - R8R4G 
GGG. G8GGGGG. G8GGL8AGFEL4G. F8GR4GFER4R4 R 
20" 



60 U3$- 11 T108Q4L4DEFG. A8BÜ5C04AFGG#AFG03G 

04C03CR404CEG05C04CR403CB040G03GR«04C05C 

CC. 04A8EF8D8G03G04CQ3GC R20 M 

70 PLAY Ui*,U2*,U3* 

80 FOR F=l TO 8000:MEXT F 

90 GOTO 70 

100 SCREEN 0:PRINT :PRINT:PRINT -PRIHT :PRI 
NT :PRINT :PRINT :PRINT 
110 PRINT' 1 
120 - PRINT 11 
130 PRINT |: 
140 PRINT" 
150 PRINT 1 "' 
160 RETURN 



HIMNO 



PROGRAMA DE MUSICA: ROCK' 



10 REÍ1 ****** MUSICA ****** 
20 REM EFECTOS ESPECIALES 
30 REM ** ROCK ** 

40CLS:KEY OFF : CLEAR :COLOR 1 > I NT CRND C 1 1 * 
15D+2 

50 LOCATE 14, 17:PRINT"R 0 € K* 1 
60 B=500:PLAY"U12" 
70 A$="T230O3EG#BO4C#DC#Q3BG# 11 
80 B*="T230Ü3AO4C#EF#GF#EC#" 
90 C$^''T230Ü3BO4D#F#G#AG#F#D# ! ' 
100 FQR A«3 TO 15 

110 IF A--9 OR A=5 OR A=6 OR A=7 OR A= 1 5 
THEN 150 

120 PLAY"ri=B : n :PLAY ,! S=A ! " 

130 FOR 1 = 1 TO 2 iPLAV A$ "COLOR , I NT C RND C 1 
J*141+2 :NE'XT 

140 PLAY B$ : COLOR , I NT C RND C 1 3*14 D +2 sPLAY 
A$ ¡¡COLOR, I NT C RND C 1 1*141+2 : PLAY C$ i COLOR , 
INTCRNDC 1 ]*141+2 :PLAY BICOLOR, I NT £ RND C 1 
1*141 + 2 

150 NEXT A:GOTO 100 



PROGRAMA PARA HACER UNA COPIA DE LA PANTALLA 
(SCREEN 0) POR IMPRESORA 



10 REtf *** HARD-COPY ->SCREEN 0 W$ 
20 ' * 

30 POR K=0 TO 960 

40 A=UPEEKCBASEÍ03 f-K") 

50 L PR [NT CHR$ CAI ; 

60 IF L-35 THEN 80 ELSE IF LOS THEN L=L 
+ 1 

70 NEXTK :END 

80 LPRINT :L=0:GÜTO 70 



PROGRAMA PARA HACER UNA COPIA DE LA PANTALLA 
(SCREEN 1) POR IMPRESORA 



10 REH *** NARD-COPY -> SCREEN 1 *** 
20 ' 

30 FOR K=0 TO 767 

40 A~UPEEK C BASE C 5 3 + K ] 

50 LPRI NT CHR$ C A3 ! 

60 IF L = 31 THEN 80 ELSE IF L<31 THEN L = L 
*Í 

70 NEXTK : END 

80 LPRINT:L=0:GOTO 70 



PROGRAMA PARA HACER UNA COPIA DE LA PANTALLA 
(SCREEN 2/3) CON EL PLOTTER PRN-C41 DE SONY. 

10 ■ ***** HARD-COPY ***** 
20 1 

30 ' PLOTTER PRN-C41 SONY 
40 * 

50 p SCREEN 2/SCREEN 3 
60 ' 
70 ' 



80 COLOR 4. 4 
90 LPRIMT 

190 LPRINT CHR$C&hiei + !, ±r 
! 10 FOR Y-0 TO 192 
120 FOR X = 0 TO 250 

130 IF PÜTNTfX, Y]-4 THEN LPR INT " R3, 0 " : GO 
TO 160 

140 LPRINT" J0 B 3, 3,0.0, -3,-3,0" 
150 LPR I NT ' R3 , 0 " 
160 NFXT X 

170 L PRINT"R-753, -3" 
180 NEXT Y 



PROGRAMA PARA UTILIZAR CON EL PLOTTER PRN-C41 
DESONY: CIRCULO 5 



10 1 ### PLOTTER PRN-C41 *** 

20 1 SONY 

30 ' CIRCULO 

40 LPR INT CHR* C 27 ] ; 

50 LPR I NT " R 1 25 , - 1 25 " 

60 LPR INT" I '' 

70 LPRINT 1 H80, 0" 

80 P = 3„ 14153 

90 AM im*l 

100 FOR R=0 TO 360 STEP 5 
110 S=R/180*P 
120 SI=INTCSINC A*S]*803 
130 CO^INTCCOSCB^S]^803 
140 LPR I NT " D " :C0:", " ;Sl 
150 NEXT 

160 LPR I NT 1 R0. -125' 
170 LPR I NT " A " 



PROGRAMA PARA UTILIZAR CON EL PLOTTER PRN-C41 
DE SONY: CUADRICULA' 



10 ' **** PLOTTER PRN-C41 **** 
20 ' SONY 
30 ' CUADRICULA DE COLORES 
40 LPRINT 

50 LPRINT CHR$C2?3 : "tr 

60 LPRINT" I 11 :C^0 

70 POR 1=1 TO 20 

80 LPRINT "C M tC 

90 IP I rfOD 5 = 0 THEN C=C+1 

100 IF C>3 THEN C=0 

1 10 LPRINT" J 198, 0" 

120 L PR I NT " R0 , -5" 

130 LPRINT' 1 J-198, 0" 

140 LPR I NT " R0 , -5 ,L 

150 NEXT 

160 LPRINT"R0,5" 

170 POR 1 = 1 TO 20 

180 LPR I NT " C |; ;C 

198 IP I riQD 5 = 0 THEN C = C+1 

200 IP C>3 THEN C=0 

210 LPRINT "JB, 198" 

220 LPRINT"R5,0" 

230 LPRINT" J0, -198" 

240 LPRINT !, R5, 0' 

250 NEXT 

260 LPRINT ! L PR I NT 
2^0 LPRINT"A" 



JUEGO: LABERINTO 



5 L--2 

6 Cl PAR :RESTORE :COLOR 7,1.1 

10 'LABERINTO 1 

11 CLS:SCREEN 1 : PR I NT ! PR I NT : PR I NT S PR I NT 

12 PRINT" r — 1" 

13 PRINT" | LABERINTO I 11 

14 PRINT" 1 — 1 11 



15 FOR ͻJ TO 1000 

16 NEXT I 

20 ON ERROR GOTO 470 

30 DEFIMT A-Z:DEF FNE CX , Y 3 = C C X=U)X- 1 3 AND 
CY^UV-1 1 3 

40 Din DX C 33 , DY t 3 3 : FOR 1-0 TO 3:READ DXC 

C3 , DYC I ) :NEXT 

50 DATA 2,0,0.2,-2,0,0,-2 

60 LOCATE 7,8: PRINT M NIÜEL ? Cl-33" :A*=I 
NKEY$:L »UfcLCA#}í IF L Ó OR L>3 GOTO 60 
70 FOR 1 = 1 TO L : RFAD UX:NEXT :UY=UX 
80 DATA 5,8, 12 

30 FOR 1 = 1 TO UAL C R I SHT* t STR* C T I ME 3 P _ '2 33 : 
X=RND ( 1 3 :NEXT 

91 PRINT :PRINT "-PRINT :PRlNT 
100 PR I NT " ESTAS EN UN LABERINTO. DEBES" ! 
PRINT :PRINT" BUSCAR LA SAL IDA" :PRINT : 
PRI NT : PR I NT :PR I NT " UTILIZA LOS CURSORES 
PARA 1 '' : p RÍNT :PRINT" MOUERTF POR LOS PAS 
IL.LOS" :KX-UX-M :KY^ÜÜY>1 : ÜJX- UX*2 í UY=UY*2 
110 Din MCUX, WY3 

120 FOR 1=0 TO UJX;nC0,n-l :nCI,0J = l :nc 

ux, n^i mu , uv] = i :hext 

130 C=CKX-23*CKY-23 :CA^C-4 

140 ,X-INTCRND£ 1 3*KX3*2:y_ImTC RND C 1 >*KX3* 
2 :IF HCX,Y3~0 GOTO 140 

150 GOSUB 260 :IF c <CA THEN IF CN GOTO 1 
50 

160 IF CO0 GOTO 149 
170 > JUEGO 

180 SCREEN 2 :XMfl :Vtf=*l :0R«0 
130 GOSUB 320 " L INE 

200 IF FNE f XM , YIÍ3 THEN OPEN '" GRP S "POR O 
UTPUT AS MI :PSETr30, 10] :Ff?lNT$U , M S A L I 
D A 1 : GOSUB 500:fdr QU-1 TO 1500:N£XT QU 
: SCREEN 1 ¡LOCATE 1,10: PRINT HAS ENC0 

NTRADO LA SALIDA'' : GOSUB 600 
210 A^STICKf 03 : I er A=0 THEN 218 
220 A-CA-13/2 :DR--CDR + A 3 MOD 4 
230 ir nrXM + DXfDR3 f¿ 9 Yn+DYCDR3.^23 THEN D 
R=CDRM-A3 MOD 4:G0T0 210 
240 Xri--Xn + DXCDR3 ! v n^ Yl + pv C DR 3 
250 GOTO 19@ 
260 ' SUBRUTlNA 



270 R0=INTCRNDC 1 3*43 :R=R0 
280 IF MCX+OXf R3 . Y+DYÍR3 3=0 GOTO 300 
290 R-CR+1 irtOD 4 í IF ROR0 GOTO 280 ELSE 
CN -0 : RETURN 

300 HCX+OXtR )/2, Y + DY fR3/23^1 :X-X+DXCR3 :Y 

310 P1CX, Y3 = l :C = C-1 :CN^-1 =RETURN 
320 CLS 

330 X=XM :v = Yfi :X8~128 í ^0-92 :LX=1 28 i LY-92 
340 U0=-DXCDR3/2 :U0^DYCDR3 ^2 
350 U1--DXC CDR+1 3 Í10D 43/2íU1=DYC CDR+ 1 3 (1 
OD 43^2 :U2=DXC CDR+33 MOD 4 3/2: U2-DY C C DR+ 
3 3 nOD 4 3/2 

360 IF riCX,Y3 THEN IF FNECX-U0, Y-U03 GO 
TO 450 ELSE 460 

370 IF MCX+U1, Y+U13 THEN GG5UB 430 ELSE 
GOSUB 400 

380 LX=~LX:IF M C X + U2 p Y+U2 3 THEN GOSUB 43 
0 ELSE GOSUB 400 

390 LX-ABSCLX*. 8 3 : L Y - L Y # . 8 : X=X+U0 ; Y = Y + U0 
: GOTO 360 

400 LINECX0+LX. Y0+LY3-CX0+L.X, Y0+LY3 

410 LINECX0+LX, Y0+LY*„ 8 3~ C X01-LX* . 8. Y0+LY 

*. 8 3 

420 LINE-CX0+LX*. 8, Y0-L Y*. 83 :L I NE - CX0+L 

X, Y0-L Y*. 8 3 íRETU'RM 

430 LINECX0+LX, yq + l Y 3- C X0+LX* . 8 . Y0+L Y# . 8 

3 

440 LINECX0+LX, vg^L Y 3 - C X0+LX* - 8 ¿ Y0-L.Y*. 8 
3 : RETURN 

450 LINECX0-LX, Y0-L Y 3 - C X0+LX „ Y0+L Y 3 , , BF : 
RETURN 

460 L I NE f X0-LX, Y0-L Y 3 - C X0+LX, Y0+|_Y3 , , B :R 
ETURN 

470 IF ERL=280 THEN IF ERR-5 OR ERR-3 TM 

EN RESUME 230 

480 ON ERROR GOTO 0 

490 END 

500 FOR I = l TO 3 :PLAY"T200O5L62GECGECGEC 
GECGECGEC " :NEXT I : RETURN 

600 LOCATE 2, l 5 : PRI NT " QUI ERES CONTINUARC 
S/N 3 5 " : = I NKE Y $ ! I F fi*= M S" THEN 5 ELSE I 
F A&- "N 11 THEN END ELSE IF A$O jl S m OR A* O 
"N JI GOTO 600 



PROGRAMA PARA DIBUJAR CON LOS CURSORES 



10 ON STOP GOSUB 250:STOP ON 
20 CLS 

30 COLOR 1,15,15 
40 SCREEN 2, 0 

50 OPEN 1 GRP:'TÜR OUTPUT AS #1 
60 PRESET C 1 7 , 13 

78 PR I NT #1, "TECLAS DE COMANDO PARA DIBU 
JAR" 

80 PRESET f 17, 32] 

90 PRINTttl, "Fl rPALETA DE COLORES C se lecc i 
on con curs o rO 11 
100 PRESETC17,56] 

110 PR1NT#U "F2 :L INEAS Clongitud y posic 
ion final con cursor] 
120 PRESET t 17, 80] 

130 PRINT#1 , "F3: C I RCUNFERENC 1 AS t f o ^ma y 

ta maño con cursor)" 
1 4¿ PRESET C 17, 104] 

150 PR1NT#1 , "F4 :CUADRADOS COLOREADOS Cfo 
"Tía y tamaño con cursor]" 
J i PRESET C 17, 128] 

170 PR í NTtt 1 , " ^5 : COLOR A SUPERE I C I ES í s o 1 o 

sí están cerradas) 
180 PRESET 1 1 7 , 152] 

190 PR I NT# 1 , 11 F6 : BORRADO DEL DIBUJO' 1 
200 PRESET C 1 7 , 170] 

210 PR [ NT# 1 , " PARA EJECUTAR COMANDOS PULS 
E " 

220 PRESET C 17, 183) 
230 PR I NT# 1 p ,¿ TECLA RETURN" 
240 A*=INK£r#:ÍF A$ = " " TREN240 
250 CLS 

260 COLOR 1,15,15 
270 SCREEN2 

280 FOR O=0TO249STEP16 

230 L.INEÍD, 187 WD+16, 1 90 ] , D/ 1 6 , BF 

300 NEXTD 

310 SPRITE^C 1 l=CHR$f £cH0 3+CHR*C8cH103+CHR* 
C8«H10)+CHR*f 8<H7C3+CHR$f &cH10)+CHR*C&HI0) + 
CHR$C&H0]+CHR$C&H0] 
320 C=0 



330 XM28:Y = 96 

340 PUT SPRITE 3. f X-3, Y -43 , 1 , 1 
350 ft**IfS£E¥Í 
360 PSFT CX,Y3»C 

370 ON KEV GOSUB 650 , 500 , 780 . 940 , 620 , 1 09 

0 

380 KEY f 1 TON : KEV C 2 3 ON :KEYC 3 ION :KEYC 4 )ON: 
KEYC530N :KEYC630N 



390 


IF 


A$=" rl T HEN 


340 






400 


IF 


X»2SS THEN 


X = X~1 






410 


ir 


Y=186 THEN 


Y = Y-1 






420 


IF 


X=0 THEN X- 


X+l 






430 


IF 


Y = 0 THEN Y~ 


Y+l 






440 


IF 


A$=CHR$C283 


THEN 


X 


-X+l 


450 


IF 


A$=CHR*C293 


THEN 


X 


-x-i 


460 


IF 


A$=CHR$C303 


THEN 


y 


=Y~1 


470 


IF 


A$^CHR$f31 D 


THFN 


Y 


^Y+l 


480 


IF 


A$-CHR$C843 


THEN 


600 



490 GOTO 340 
500 A*X:8»Y 
510 PS£TtX,Y3,C 
520 A$ = I NKEY$ 

530 IF A$ = CHR$ T 133 THEN RETURN 

540 IF A$=" "THEN520 

550 LINECA,B3-tX,Y3, 15 

560 IF A*~CHR$C28")THENX=X+1 

570 IF A$-CHR$C293THENX-X-1 

580 IF A*^CHR*C333THENY=Y-1 

590 IF A$=CHR$C311THENY=Y+1 

600 LINECA, B3-CX, Y} ,C 

610 GOTO 520 

620 -X = X : v = y 

630 PA INTCX+2 , Y+2 3, C 

640 RETURN 

650 N=^0 

660 LINETN, 1863-CN+16, 1923. 1,B 

670 C=P0INTCN+5, 190] 

680 A$-TNKEY$ 

690 IF A$^ ,! " THEN 680 

700 LINECN, ! 86 3 - t N+ 1 6 , 192), 15*6 

710 IF A$-CHR$tl33 THEN RETURN 

720 IF ñ£--CHR$C283THENN=N+16 

730 ir A$^CHR$Í 293THENN^N~16 



740 ir N----16THENN-0 

750 IF M=256THENN=N-16 

?m LINEfN,186^CN+16. 192D.1.B 

770 GQTO660 

780 P=;XíG=Y 

790 ñ*=IMKEY* 

800 ft=AB$CF~X3 ?8*A8SC6*YJ :h=A+l : I-B+l íT 
ABSC I /Ht . l 1 

810 CIRCLECX, Y] , A,C, . ,T 

820 IF A$^" M THEN790 

830 IF A£=CHR$C 13)THEN RETURN 

840 C1RCLECX, Y3 , A, 15, . .T 

850 IF A*=CHR*C28)THENF=F+I 

860 IF A$~CHR$ C 29 3 THENF -F - 1 

870 IF A$-CHR$r30]THENG=G-l 

880 IF A$^CHR*r3nTHENG-G+l 

890 IF F=0 THENF=F+1 

900 IF F=255 THENF-F- 1 

910 IF G=0 THENG=G+ 1 

920 IF GM85 THENG-G-1 

930 GOTO 790 

940 D*X:£«Y 

950 A$=INKEY* 

960 IF A$=CHR$C 131THEN RETURN 
970 IF A$^" " THEN950 
980 LINECD, E 3 - C X , Y], 15, BF 
930 IF A$=CHR*t281THENX^X+l 
1000 IF A*=CHR$C293ThENX-X-l 
1010 IF A* = CHR$C30:iTHENY^Y-l 
1020 IF A$ = ChR*f3l ")THENY = YM 
1030 I F X-0 TH£MX~X+1 
1040 IF X-,255 FhENX-X-l 
1050 IF Y=@ THENY^Y*1 
1060 IF Y^185 THENY -Y - 1 
1070 L1NECD.EJ ~ C X . v ] , C , B r 
1080 GOTO 950 
1090 GOTO 250 



ANEXO 5: MENSAJES Y CODIGOS DE ERROR 



Código Mensaje 



1 



NEXTWithout 
FOR 



2 Syntax error 



RETURN 

without 

GOSUB 

Out of DATA 



lllegal function 
cali 



Explicación 

Existe un nombre de variable en una instrucción 
NEXT que no corresponde a la variable de la ins- 
trucción FOR o no existe el NEXT. 

Una línea de programa contiene caracteres inco- 
rrectos (puntuación, paréntesis no emparejados, 
error mecanografieos) 

Se encontró una instrucción RETURN sin que se 
hubiera incorporado un comando GOSUB, GO- 
SUB no emparejado. 

Se efectuó una instrucción READ, pero no que- 
daban datos por leer en la instrucción DATA. 

Un parámetro fuera de gama se ha asignado a 
una función matemática o de STRING. Un lllegal 
function cali puede ocurrir también como resul- 
tado de. 

1, Una instrucción errónea o excesivamente 
larga. 

2, Un argumento negativo o cero con LOG 
3; Un argumento negativo con SQR 

4, Un argumento impropio para MID $ F LEFT $, 
RIGHT $, INP, OUT, PEEK, POKE, TAB, SPC, 
STRIN S, SPACE $, INSTR $ o ON... GOTO 



6 Overflow 



El resultado de un cálculo es demasiado largo 
para ser representado en el formato BASIC. 



7 Outof 
memory 



8 Undefined line 
number 

9 Subscriptout 
of range 



10 Redimensioned 
array 



1 1 División by 
zero 

12 lllegal dírect 



13 Type 

mismatch 



14 



16 



Outof string 
space 



15 String too long 



String formula 
too complex 



Un programa es demasiado largo, tiene dema- 
siadas instrucciones, demasiados GOSUB, de- 
masiados FOR, demasiadas variables o expre- 
siones demasiado complejas. 

Una línea referenciada en un GOTO, GOSUB, 
IF_ THEN_ ELSE es una Jinea inexistente. 

Un elemento de la matriz está referenciado con 
una cifra fuera de las dimensiones de la matriz, o 
posee un número erróneo de subíndices, 

Una matriz puede dimensbnarse soto una vez, 
con DIM Si se efectúan dos DIM para una misma 
matriz aparece este mensaje, si se usa una varia- 
ble de matriz antes de que ésta sea dimensio- 
nada, se ejecuta una operación DIM automática- 
mente dimensionándose en 10 elementos. Si se 
pretende dimensionar posteriormente, se gene- 
rará el mensaje de error citado. 

Al ser una operación sin sentido matemático 
aparece el mensaje de error. 

Una instrucción que solamente puede incorpo- 
rarse en un programa se ha introducido en 
Modo directo. 

Un número se ha asignado a una cadena o vice- 
versa; una función que esperaba un número re- 
cibe una cadena o viceversa. 

Unas variables string han sobrepasado la memo- 
ria disponible. El BASIC asignará dinámica- 
mente espacio para cadenas hasta que se ago- 
ten los recursos de memoria. 

Aparece este mensaje si se pretende abarcar en 
una cadena más de 255 caracteres. 
La expresión de la cadena es demasiado larga o 
compleja. Debería dividirse ai menos en dos par- 
tes para que pueda ser elaborada. 



17 Can't continué. 



18 Undefined 
userfuncfion 

19 Devicel/0 
error 



20 Verify error 



21 NO RESUME 



22 RESUME 

without error 



23 Unprintable 
error 



24 Missing 
operand 

25 Line buffer 
overflow 

26-49 



50 Field overflow 



El programa no puede continuar porque 

1. Se ha producido un error 

2. se ha modificado durante una interrupción de 
su ejecución, 

3. No existe 

Se usó como referencia una función definida por 
el usuario, pero la misma no había sido definida 
usando ia instrucción DEF FN. 

Error al conectar cassette, impresora, pantalla. 
Es un error fatal ya que el programa no puede 
recuperarse. 

El programa actual es distinto del grabado en 
cassette. (Grabación incorrecta) 

Se ha entrado una rutina de tratamiento de erro- 
res, pero no hay ninguna instrucción RESUME. 

Se encuentra una instrucción RESUME antes de 
que se haya entrado en una rutina de tratamiento 
de errores. 

No hay mensaje de error por la condición de 
error que se da, Usualmente es el caso de una 
instructíon ERROR con un código de error no 
definido. 

Una expresión contiene un operador no seguido 
de operando. 

Se ha entrado una linea con demasiados carac- 
teres. 

Estos códigos no tienen definición. Se reservan 
para futuras expansiones del BASIC. 

Una instrucción FIELO intentó colocar más bytes 
de los especificados para la longitud de registro 
de un fichero aleatorio. 



51 Infernal error Se ha producido un funcionamiento defectuoso 

en el lenguaje BASIC. 

52 Bad file En una instrucción o comando se cita un número 
nurnber de fichero que no se ha abierto anteriormente o 

que está fuera de Ja gama de número de fichero 
especificados en la instrucción MAXFILES. 



53 



File not found 



En una instrucción LOAD, OPEN o KILL se cita 
un fichero que no existe en la memoria. 



54 



File already 
open 



55 Inputpastend 



Se ha encontrado una instrucción de salida para 
un fichero que ya estaba abierto, o se ha entrado 
un comando KILL para un fichero que está 
abierto. 

Se ha ejecutado una instrucción INPUT tras ha- 
berse entrado todos los datos en el fichero o a 
partir de un fichero nulo. Para evitar este error 
usar la función EOF, para detectar el final del 
fichero. 



56 Bad file ñame Se ha usado una forma ilegal de nombre de fi- 

chero p.e.: LOAD, SAVE r KILL, ÑAME, etc. 

57 Dírect Se encuentra una instrucción directa ai cargar 
statement ín con LOAD un fichero en formato ASCi i. La ejecu- 
file ción de LOAD se ha interrumpido. 

58 Secuential l/O Una instrucción de acceso aleatorio es utilizada 
only para un fichero secuencia!. 

59 File not open... El fichero designado con PRINT INPUT*, etc. 

no se ha abierto. 



60-255 



Estos códigos no tienen definición. El usuario 
puede crear su propio código de errores dentro 
de esta secuencia. 




! 



I 



c 
c 
V